Groovy's classX.metaClass.getProperty в Scala - PullRequest
5 голосов
/ 06 декабря 2011

Есть ли в scala что-нибудь эквивалентное замечательной функции SomeClass.metaClass.getProperty в Groovy? Это было бы очень полезно при создании предметно-ориентированных языков. Например, я мог бы тогда сказать: val x = SomeClass(); x.arbitraryPropertyName вместо x.get("arbitraryPropertyName") или x("arbitraryPropertyName").

1 Ответ

9 голосов
/ 06 декабря 2011

По вашему описанию, эта функция звучит как Dynamic от Scala. От Скаладок ,

Черта маркера, которая позволяет динамические вызовы. Экземпляры х этого trait позволяет вызывать x.meth (args) для произвольных имен методов meth и списки аргументов Если вызов изначально не поддерживается х, это переписано в x.applyDynamic ("meth", args).

То есть, если ваш класс расширяет Dynamic, то вызовы вида x.arbitraryPropertyName переводятся в x.applyDynamic("arbitraryPropertyName"), и, конечно, вы можете определить поведение applyDynamic.

...