等号和类型不匹配

时间:2011-05-17 13:05:46

标签: scala syntax

使用标准小工具工具包(SWT)时,我通常会使用类似的内容来定义GridLayout

layout.marginTop = layout.marginBottom = 
    layout.marginLeft = layout.marginRight =
        layout.horizontalSpacing = layout.verticalSpacing = 20

它适用于java但不适用于scala。 它给了我type mismatch; Found: Unit Required: Int

那怎么解决呢?

3 个答案:

答案 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