我正在阅读斯卡拉,我在想...... 为什么
val capacity : Int
而不是
val Int capacity.
为什么做出这个选择的任何原因。如果没有,我似乎不喜欢摆脱Java声明它的方式。本来可以更容易地从Java转换到Scala(不是很多,而是一点点)
答案 0 :(得分:20)
因为大多数时候你可以放弃Int部分。 Scala具有比Java更简洁的类型推断系统。
答案 1 :(得分:10)
我想我读过马丁奥德斯基本人某个地方的声明,说这个决定也是为了提高可读性。当然是这种情况,例如比较
val Double number = ...
val Array[(Seq[String], Map[Seq[String], Double])] something = ...
val String pattern = ...
与
val number : Double = ...
val something : Array[(Seq[String], Map[Seq[String], Double])] = ...
val pattern : String = ...
大多数情况下,您需要快速(直观地)查找引用/方法的名称,而不是类型。
答案 2 :(得分:8)
x:T是逻辑和许多编程语言中类型的标准表示法。 C及其后代,其中包括Java,与此不同。但是C的类型符号真的很糟糕(尝试写下一些中等复杂的高阶函数的类型,如map)。
此外,使用这种表示法很容易省略类型(如Wysawyg已编写的那样),或在表达式中添加类型。
答案 3 :(得分:2)
以下是Wysawyg声明的一个例子:
val capacity = 2
但是你通常不会只用val
来做这件事。
trait Foo {
def capacity = 2 // Allow child classes to override and decide the value later
}
// Force instances of Bar to set the value
class Bar( override val capacity : Int ) extends Foo
// Have Bat determine it on the fly
trait Bat extends Foo {
def onlyAThird : Int
override def capacity = onlyAThird * 3
}
(我试图将其作为评论插入,但唉,没有格式化。)
答案 4 :(得分:2)
在 Scala编程中,它说这种语法的技术原因是它使类型推理更容易。
答案 5 :(得分:0)
我认为丹尼尔想到了类似的东西:
val a = 7
val b: Int = 8
var x = "Foo"
var y: String = "Bar"
def sum (a: Int, b: Int) = a + b
def mul (a: Int, b: Int): Int = a * b
通常可以推断出类型。