为什么我不能在Scala中写println“Hello world”?
发布时间:2020-12-16 09:44:00 所属栏目:安全 来源:网络整理
导读:我对Scala很新,但我认为这种语言的优点之一是删除例如Java中存在的例如括号和圆点的仪式。所以当我发现我可以写的时候我很困惑 str1 equals str2 但不是 println "Hello world" 我猜测这与第一个例子有三个“部分”有关,但第二个例子只有两个,但是我很难
我对Scala很新,但我认为这种语言的优点之一是删除例如Java中存在的例如括号和圆点的仪式。所以当我发现我可以写的时候我很困惑
str1 equals str2 但不是 println "Hello world" 我猜测这与第一个例子有三个“部分”有关,但第二个例子只有两个,但是我很难理解为什么会这样。 解决方法
当只有两个部分时,表达式被看作是方法调用。即唯一的可能性
println "Hello,world" 将会 println."Hello,world" 这当然不是很有意义的。 (*****见下文补充) 但是,如果您愿意,可以编写Console println“Hello,World”来解决歧义。 它不会在字符串示例中看到那个二义词,一个字符串不可能是一个方法名称,但是想到以下几点: class B val b = new B object A { def apply(myB: B) { print("apply") } def b { print("b") } } 现在,在写A b的时候,我该怎么做怎么解释?原来是: A b // "b" A.b // "b" A(b) // apply 所以,有一个明确的规则在两部分表达中做什么。 (我希望没有人开始分裂头发关于应用和真正的方法调用…) 加成 随着动态类的出现,您可以玩一下,定义以下内容 object println extends Dynamic { def typed[T] = asInstanceOf[T] def applyDynamic(name: String)(args: Any*) = Console.println(name) } 现在看!!没有括号: println `Hello,world` // prints,"Hello,world" 当然,请不要这样做在孩子面前或在现实生活中的代码。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |