最近我遇到了一些定义类型的代码,如下所示:
val a = "Hello":String
而不是:
val a:String = "Hello"
第一种符号是否有任何优势?也许,也许是在汇编中?
答案 0 :(得分:3)
我能想到的一个边际好处是,第一个符号可以用在里面一个表达式,例如(a: String) + b
,如果您不想提供完整类型或想要触发隐式转换(当然,您可以同时执行这两种操作,同时仍然提供左侧的类型)。另一方面,第二个:
是递归值和方法以及抽象成员所必需的;
使用得更广泛;
(a + b): String
; 等情况下,在表达式周围不需要括号 如果定义需要多行,
可让您更快地看到签名。
我无法想到任何其他重大差异。
答案 1 :(得分:0)
这是类型归属。它基本上是scala中的编译时强制转换。我不喜欢
val a = "Hello": String
是一个正确的用途,它应该与val a: String = "Hello"
完全相同,但它更难阅读。您可以在REPL中检查它:val b: String = 5
和val b = 5:String
都会在val b = 5.asInstanceOf[String]
生成运行时错误时生成编译时错误
然而,类型归属有一些非常好的用法。 a:_*
可能是最受欢迎的。您还可以使用它触发隐式转换:
implicit def aToB(i: A): B = A.makeB()
(new A()) : B // will run A.makeB()