在Scala中使用“val capacity:Int”而不是“val Int Capacity”的任何原因

时间:2009-12-12 00:49:22

标签: scala types syntax language-design

我正在阅读斯卡拉,我在想...... 为什么

val capacity : Int 

而不是

val Int capacity.

为什么做出这个选择的任何原因。如果没有,我似乎不喜欢摆脱Java声明它的方式。本来可以更容易地从Java转换到Scala(不是很多,而是一点点)

6 个答案:

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

通常可以推断出类型。