什么是Scala'新'语法

时间:2013-05-29 15:46:38

标签: scala

来自ScalaTest文档:

class ExampleSpec extends FlatSpec {

def fixture =
new {
  val builder = new StringBuilder("ScalaTest is ")
  val buffer = new ListBuffer[String]
}

...

我不明白这里是如何使用新关键字的。夹具显然是一个功能,它声明并返回......什么?它似乎是一个对象,因为它具有可以访问的成员(构建器和缓冲区)。符号。

这里创建的是一个匿名类,它是AnyRef的子类吗?

1 个答案:

答案 0 :(得分:13)

是的,它返回任何类的实例。在REPL会话中自己检查它并不难:

scala> def fixture = new { val string = "mr. String" }
fixture: Object{val string: String}

Java可以做同样的事情,信不信由你。以下是有效的Java

(new Object() {   
  public void sayHello() {
    System.out.println("hello!");   
  }   
}).sayHello(); 

Java版本只是一种稍微冗长的语法,并且具有类型系统限制,使其几乎无用。 有关它的更多信息http://james-iry.blogspot.com/2009/04/java-has-type-inference-and-refinement.html