#scala #dynamic #scalac
#scala #динамический #scalac
Вопрос:
В качестве моей первой попытки проникнуть в динамическую среду Scala я подумал, что попробую получить доступ к свойствам компонента через applyDynamic.
Мой первый очень грубый вариант
trait BeanProperties extends Dynamic {
def applyDynamic(name: String)(args: Any*) = {
if (args.length == 0)
PropertyUtils.getProperty(this, name)
else
null
}
}
так что
val bean = new JTextField("text") with BeanProperties
bean.getText should equal("text")
bean.text should equal("text")
пока все хорошо! Но когда я пытаюсь
bean.background should equal(bean.getBackground)
компилятор жалуется, пытаясь вместо этого предоставить доступ к полю с именем background, а не синтезировать метод.
variable background in class Component cannot be accessed in javax.swing.JTextField with BeanPropertiesTest.this.BeanProperties
Это задумано, упущение или что-то, что планируется исправить?
Комментарии:
1. Кажется, что это вызывает довольно большой скрытый интерес, но ни у кого нет никаких мыслей — и списки рассылки Scala на удивление молчаливы.
Ответ №1:
Черт возьми, я предложил исправить это https://github.com/scala/scala/pull/98
Если это будет принято, это действительно будет исправлено к моменту выхода Dynamic из -Xexperimental.
Ответ №2:
Ответ в списке рассылки Scala-Lang от Мартина Одерски
Я думаю, это должно быть исправлено к моменту выхода Dynamic из -Xexperimental.