在Scala中绑定println等函数在哪里?

时间:2014-01-06 22:42:14

标签: scala

我正在学习scala,我看到很多例子在类中使用了printprintln。我注意到Console println "Hello"会打印,但println "Hello"不会打印expected but string literal found.,但是println("Hello")会有效。

据我所知,一切都是Scala中对象/类的函数,在我的第一个例子中,我在println对象上调用Console,但在第二个场景中我需要括号,为什么?

1 个答案:

答案 0 :(得分:7)

println("Hello")表示Predef.println("Hello")

默认情况下会导入Predef的所有成员。

在scala中,您可以导入对象的成员。

您可以像这样调用方法printlnPredef println "Hello"。对于具有单个参数的方法,您可以删除点和括号。它被称为operator notation。但在这种情况下,您必须指定目标对象(Predef)和参数。

另见:

PREDEF

The Scala Language Specification 9.1编译单元

  

按顺序隐式导入每个编译单元:   包java.lang,包scala和对象scala.Predef

Programming in Scala, First Edition. 4.4 A Scala application

  

Scala隐式导入包java.langscala的成员   以及名为Predef的单个对象的成员,以及每个对象   Scala源文件。 Predef位于scala包中,包含   许多有用的方法。例如,当您在Scala中说println时   源文件,您实际上是在println上调用Predef。   (Predef.println转过身来调用Console.println   真正的工作。)当你说assert时,你正在调用Predef.assert

运算符号

Programming in Scala, First Edition. 5.3 Operators are methods

  

任何方法都可以是运算符

     

在Scala中,运算符不是特殊的语言语法:任何方法都可以   一个运营商。使方法成为操作符的方法就是如何使用它。什么时候   你写“s.indexOf('o')”,indexOf不是运营商。但是当你   写“s indexOf 'o'”,indexOf是一个运算符,因为你正在使用它   用运算符表示法。