Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Swing中的案例类_Swing_Scala_Case Class - Fatal编程技术网

Scala Swing中的案例类

Scala Swing中的案例类,swing,scala,case-class,Swing,Scala,Case Class,我从一本书中读到这一章,它说: 按下按钮将创建一个事件,该事件是以下案例类的实例: 案例类按钮点击(来源:按钮) case类的参数引用单击的按钮。与所有其他Scala Swing事件一样,此事件类包含在名为Scala.Swing.event的包中 然后是这个代码,其中b是实际按下的按钮: case ButtonClicked(b) => //code 我查看了API,果然,ButtonPressed有一个构造函数: new ButtonClicked(source: AbstractBu

我从一本书中读到这一章,它说:

按下按钮将创建一个事件,该事件是以下案例类的实例:
案例类按钮点击(来源:按钮)

case类的参数引用单击的按钮。与所有其他Scala Swing事件一样,此事件类包含在名为Scala.Swing.event的包中

然后是这个代码,其中b是实际按下的按钮:

case ButtonClicked(b) => //code
我查看了API,果然,ButtonPressed有一个构造函数:

new ButtonClicked(source: AbstractButton) 
那么鼠标事件会发生什么变化,例如mousePressed?通常在代码中执行此操作:

1)
案例e:MousePressed=>///code//

这是否意味着也可以执行以下操作?它们是一样的吗

2)
case MousePressed(e:java.awt.event.MouseEvent)

1和2的区别是什么

编辑:

1)也是案例类吗?您不必将参数传递给它?

存在就是这样-它是类的固有特性,不依赖于您如何使用它。正如您所看到的,(顺便说一句,它不是一个子类,以免引起混淆),所以它总是一个case类

1和2完全不同。区别在于:

  • 您可以将1用于任何类型,因为您基本上是说“匹配任何类型的实例
    鼠标按下的
  • 对于2,您需要一个名为的东西—它告诉Scala如何分解您提供的模式。Case类有“免费”定义的构造函数派生的提取器,这就是为什么您可以在
    鼠标按下的
    上使用2

总之,阅读上一章,一切都会变得更加清晰。

案例类和模式匹配是Scala的通用(并且被广泛使用)功能,它们并不特定于Scala Swing。你可以阅读有关它们的信息,或者,从最新的角度来看,可能更好,主要是。谢谢。我想知道为什么MousePressed是一个case类,当你像1一样写的时候?您不必像EditDone案例类那样传递任何信息……好的,这实际上是一个答案的借口;)。谢谢你,我已经读过这个主题了,现在更清楚了。但是我还有一个问题:既然MousePressed有两个case类构造函数,那么在需要创建MousePressed事件对象时使用哪一个呢?@SonicProtein You's welcome:)。创建?在这种情况下,case类的行为与普通类类似。如果您想询问匹配问题-只有默认构造函数(“header”中的一个)获得“free
unapply
for case class”处理-如果类的作者没有添加自定义提取器逻辑,那么它将是唯一的一个。在任何一种情况下,您都可以通过查看或猜测进行检查-如果您猜错了,编译器会抱怨并提出正确的建议。请参阅问题中的第二次编辑,我必须仍然对整个问题感到困惑:/实际上,我将为此创建一个新问题,因为这个问题太长了