2016-03-03 37 views
0

让下面的Scala类:类体返回的值会怎样?

case class Foo(i:Int) { 
    println("from Foo: "+i) 
    None /* (A) */ 
} 

这种琐碎主要用于:

object HelloWorld { 
    def main(args: Array[String]): Unit = { 
    val t = new Foo(12) 
    println(t) 
    } 
} 

打印:

from Foo: 12 
Foo(12) 

我可以替代由/* (A) */标线,None通过1612new StringBuilder,行为仍然相同。

这最后一个值会发生什么?

回答

2

没有。这是无用的。这是一个没有分配的呼叫,没有副作用。垃圾收集器会删除这个对象,或者编译器会消除这个调用。

请注意,这不是构造函数的结尾,而是类体。这个(i:Int)是整个构造函数。

+0

所以这不是一个错误?甚至是一个警告汇编?为什么允许堆栈的某些值被允许? – norisknofun

+0

编译器通常无法知道这一点。你的代码可能有副作用。调用你的任何选项都没有。 –

+0

可能是因为您想要创建副作用对象。 – Heinzi

相关问题