" val a:A =新B",重点是什么?

时间:2012-06-08 06:07:33

标签: scala types type-inference

这个成语(?)在楼梯书中出现了很多次:

val b:A = new B

val b = new B
val b2:A = b

除了试图在教科书中提出一些观点之外,你为什么要声明一种与推断类型的东西不同的类型?

顺便问一下,这个名字是什么?

2 个答案:

答案 0 :(得分:14)

对于:

非常有用
  1. 描述程序员意图(我创建了一个B,但我只对A行为感兴趣
  2. 确保您只使用A中定义的方法。它将允许交换混凝土  稍后实施,无需更改大部分代码。
  3. 简化使用IDE或时可用的自动完成列表  REPL。
  4. 在某个时候强制进行隐式转换。
  5. 对于更复杂的实例化,它确保推断类型是正确的。例如

    sealed trait Answer
    case object Yes extends Answer
    case object No extends Answer
    
    scala> val a = List( Yes, Yes, No )
    a: List[Product with Serializable with Answer] = List(Yes, Yes, No)
    
    scala> val b: List[Answer] = List( Yes, Yes, No )
    b: List[Answer] = List(Yes, Yes, No)
    

答案 1 :(得分:10)

我认为它类似于对接口编程的习惯用语。通过做

val b:A = new B

您确保在此之后您不依赖于A提供的界面以外的任何其他内容。即,它保证如果你决定改为b:A = new C什么都不会破坏。