加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么我不能在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"

当然,请不要这样做在孩子面前或在现实生活中的代码。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读