Поля, мешающие разрешению метода для динамического признака Scala?

#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.