这是我的代码。我想写表达式7? &安培; 10?所以它编译。</ p>
object Test {
trait A {
def &(other: A) = ???
}
case class B(i: Int) extends A
implicit class C(i: Int) {
def ? : A= B(i)
}
val u = 7?
val v = 10?
val w = u & v // Ok, it compiles
val z = 7? & 10? //';' expected but 10 found
val g = 7.? & 10? //';' expected but 10 found
val h = (7?) & 10? //Type mismatch. found Int(10). Required Test.A
val i = 7? & (10?) //Test.A does not take parameters (on the ?)
}
为什么我不能写7? &安培; 10?是否可以通过写得太不同来将这个表达式写成6个字符?
答案 0 :(得分:2)
正如Alexiv指出的那样,问题是在使用postfix syntax作为一元运算符之后,你不能放置二元运算符。 postfix语法存在多个问题,这就是除非您启用特殊语言功能,否则Scala 2.10会向您发出警告的原因。
所以理论上7.? & 10.?
应该有效。但是现在你遇到了整数和浮点文字之间模糊的问题。从Scala语言规范§1.3.2“浮点文字”:
如果程序中的浮点字面值后跟一个以字母开头的标记,则两个标记之间必须至少有一个插入的空白字符。
因此规则的定义方式与此相反,即Scala似乎首先采用浮点数和整数秒。 7.?
上的Double
会被解释为7.x
上的方法,Int
上的Double
是7. x
上的方法,如果您想要7 .? & 10 .?
上的方法,则可以写(7?) & (10?)
。
没有怎么做相反的事情? 在期间之前放置一个空格:
{{1}}
...当然只要使用括号
就可以了{{1}}
所以你没有得到你的6个字符,但那么为什么需要这么短呢?
答案 1 :(得分:1)
使用-Xfuture
编译,在int上使用点分表示法:
apm@mara:~/tmp$ scala -Xfuture
Welcome to Scala version 2.10.1 (OpenJDK 64-Bit Server VM, Java 1.7.0_21).
[your stuff here]
scala> 7.? & 10.?
scala.NotImplementedError: an implementation is missing
答案 2 :(得分:0)
Scala编译器解释7 ? &
此行就像一个简单的高阶方法调用:7.?(&)
,因为它是一个有效的scala代码,scalac将不会寻找隐式解析并抛出语法错误