events - Scala Swing 事件中使用的反引号

标签 events swing scala

我是 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
    }

为什么我必须在 EditDone(`fahrenheit`) 和 EditDone(`celsius`) 中使用反引号 (`) 来识别我的文本字段组件,例如fahrenheitcelsius ?为什么我不能只使用 EditDone(fahrenheit)反而?

谢谢

最佳答案

这与模式匹配有关。如果在模式匹配中使用小写名称:

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

那么被匹配的对象(本例中的事件)将与任何 EditDone 匹配。任何小部件上的事件。它将对小部件的引用绑定(bind)到名称 fahrenheit . fahrenheit成为该案例范围内的新值。

但是,如果您使用反引号:
val fahrenheit = new TextField
...
reactions += {
  case EditDone(`fahrenheit`) => // ...
}

那么模式匹配只有在 EditDone 时才会成功event 引用值 fahrenheit 引用的现有对象, 之前定义的。

请注意,如果值的名称 fahrenheit为大写,如 Fahrenheit , 那么你就不必使用反引号 - 就好像你已经放了它们一样。如果您在范围内有要匹配的常量或对象,这很有用 - 这些通常具有大写名称。

关于events - Scala Swing 事件中使用的反引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6564220/

相关文章:

javascript - 帮助改进这个 javascript 输入掩码

java - 如何使用多线程来完成一项工作?

scala - 使用不带 --class 参数的 spark-submit

regex - Scala 正则表达式(由双引号分隔的字符串)

scala - 从 Chisel 代码生成 Verilog 代码的最简单方法

javascript - 如何获取元素的事件监听器

swing - Java Swing 属性 (addPropertyChangeListener)

javascript - 绑定(bind) "document ready"和 "window scroll"

java - JButton 更改文本字段的文本颜色

java - 如何将 ImageIcon 添加到 JLabel