0

これは、簡潔にするために関連性のないコードを削除した、より大きなコード本体からの抜粋です。以下のコードを単独で (新しいプロジェクトの単一のクラスとして) テストし、まったく同じ問題が続くことを確認しました。したがって、問題はここに含まれるコードに固有のものであることはわかっています。

object HumanGUI extends SimpleGUIApplication with Logs {

  PropertyConfigurator.configure("log4j.properties")

  def top = new MainFrame {
    title = "BJ GUI"

  val PlayPanel = new BoxPanel(Orientation.Vertical) {
    val hitButton = new Button("Hit")
    val stayButton = new Button("Stay")
    val doubleButton = new Button("Double")
    val quitButton = new Button("Quit")

    contents += hitButton
    contents += stayButton
    contents += doubleButton
    contents += quitButton

    listenTo(hitButton, stayButton, doubleButton, quitButton)
    reactions += {
      case ButtonClicked(hitButton) =>
        debug("Clicked Hit!")
      case ButtonClicked(stayButton) =>
        debug("Clicked Stay!")
      case ButtonClicked(doubleButton) =>
        debug("Clicked Double!")
      case ButtonClicked(quitButton) =>
        debug("Clicked Quit!")
    }

    contents = new BoxPanel(Orientation.Vertical) {
      contents += playPanel
    }
  }  

具体的には、コンパイラは、このブロックの最後の 3 つのケースに到達できないことを通知しています。

    listenTo(hitButton, stayButton, doubleButton, quitButton)
    reactions += {
      case ButtonClicked(hitButton) =>
        debug("Clicked Hit!")
      case ButtonClicked(stayButton) =>
        debug("Clicked Stay!")
      case ButtonClicked(doubleButton) =>
        debug("Clicked Double!")
      case ButtonClicked(quitButton) =>
        debug("Clicked Quit!")
    }

なぜこれが当てはまるのでしょうか?

4

1 に答える 1

2

すべての小文字の変数をパターン マッチングする場合、その場合に一致するものにバインドされます。パターン マッチ以外の変数と一致させたい場合は、` (バック ティック) を使用する必要があります。

listenTo(hitButton, stayButton, doubleButton, quitButton)
    reactions += {
      case ButtonClicked(`hitButton`) =>
        debug("Clicked Hit!")
      case ButtonClicked(`stayButton`) =>
        debug("Clicked Stay!")
      case ButtonClicked(`doubleButton`) =>
        debug("Clicked Double!")
      case ButtonClicked(`quitButton`) =>
        debug("Clicked Quit!")
    }
于 2012-11-04T17:23:19.867 に答える