Backquote Используется в Scala Swing Event - PullRequest
7 голосов
/ 03 июля 2011

Я новичок в Scala и следую одному из примеров, чтобы Swing работал в Scala, и у меня возник вопрос.Исходя из

   listenTo(celsius, fahrenheit)
   reactions += {
      case EditDone(`fahrenheit`) =>
        val f = Integer.parseInt(fahrenheit.text)
        celsius.text = ((f - 32) * 5 / 9).toString

      case EditDone(`celsius`) =>
        val c = Integer.parseInt(celsius.text)
        fahrenheit.text = ((c * 9) / 5 + 32).toString
    }

, почему я должен использовать backquote (`) в EditDone (` fahrenheit`) и EditDone (`celsius`), чтобы идентифицировать компоненты моего текстового поля, например, fahrenheit и celsius?Почему я не могу просто использовать EditDone(fahrenheit) вместо?

Спасибо

Ответы [ 2 ]

15 голосов
/ 03 июля 2011

Это связано с сопоставлением с образцом. Если вы используете строчное имя в сопоставлении с шаблоном:

reactions += {
  case EditDone(fahrenheit) => // ...
}

тогда сопоставляемый объект (в данном случае событие) будет сопоставляться с любым событием EditDone в любом виджете. Ссылка на виджет будет привязана к имени fahrenheit. fahrenheit становится новым значением в рамках этого случая.

Однако, если вы используете обратные метки:

val fahrenheit = new TextField
...
reactions += {
  case EditDone(`fahrenheit`) => // ...
}

тогда сопоставление с образцом будет успешным, только если событие EditDone ссылается на существующий объект, на который ссылается значение fahrenheit, определенное ранее.

Обратите внимание, что если имя значения fahrenheit было в верхнем регистре, например Fahrenheit, вам не пришлось бы использовать обратные галочки - это было бы так, как если бы вы их ставили. Это полезно, если у вас есть константы или объекты в области видимости, с которыми вы хотите сопоставить - у них обычно есть имена в верхнем регистре.

8 голосов
/ 03 июля 2011
case EditDone(`fahrenheit`)

извлекает значение из EditDone и сравнивает его с существующей локальной переменной fahrenheit, тогда как

case EditDone(fahrenheit)

извлекает значение из EditDone, создает новую локальную переменную fahrenheit (таким образом, затеняя существующую) и назначает извлеченное значение новой переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...