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”处理-如果类的作者没有添加自定义提取器逻辑,那么它将是唯一的一个。在任何一种情况下,您都可以通过查看或猜测进行检查-如果您猜错了,编译器会抱怨并提出正确的建议。请参阅问题中的第二次编辑,我必须仍然对整个问题感到困惑:/实际上,我将为此创建一个新问题,因为这个问题太长了