使用标准小工具工具包(SWT)时,我通常会使用类似的内容来定义GridLayout
:
layout.marginTop = layout.marginBottom =
layout.marginLeft = layout.marginRight =
layout.horizontalSpacing = layout.verticalSpacing = 20
它适用于java但不适用于scala。
它给了我type mismatch; Found: Unit Required: Int
。
那怎么解决呢?
答案 0 :(得分:7)
您无法在scala的一行中执行此操作,因为分配表达式的结果类型(例如a = b
)为Unit
。您必须有6个单独的电话:
layout.marginTop = 20
layout.marginBottom = 20
... etc
为什么赋值Unit
的结果类型和nmot指定的值?我认为这是出于性能原因as outlined in this question而选择的。
有一个related question on assignment指出声明网站,可以通过:
val a, b, c = X
答案 1 :(得分:1)
您必须单独编写多个作业。正如编译器所说,Scala中的赋值返回Unit
,可以看作是Java的void
。
答案 2 :(得分:1)
你可以做到
def assign[A](a:A)(fs: (A => Unit)*) = fs.foreach(_(a))
val r = new java.awt.Rectangle
assign(20)(r.x=_, r.y=_, r.width=_, r.height=_)
但这显然比单独编写所有内容更糟糕。但至少你不必每次都在Scala中输入“layout”:
val rectangle = new java.awt.Rectangle
import rectangle._
x = 20
y = 20
width = 20
height = 20