2016-11-10 59 views
4

例如,给定如何使用scala中的“创意”名称访问对象?

object ~ { 
    def foo = ??? 
} 

如何访问该方法?

无论这些工作:

~.foo 

`~`.foo 

使用这两种编译器抱怨“简单表达的非法启动。”

是的,我知道我可能不应该命名类“〜”,但标准库和其他一些库都是这样做的,有时候你需要和它们一起工作。

补充:看sschaef's answer,我试图

$tilde.foo 

而且,实际工作。不确定这是否是有意的,或只是这些名称被转换为JVM标识符的实现细节。而且这是否可以用于其他类型的Scala(例如Scala.js)?

我会留下这个打开一看,也许有人在更广泛的答案编钟。

+4

“An是否会在斯卡拉的其他口味(如Scala.js)工作? “呃,在这里给我一点信用:-p当然,这适用于其他Scala的风格。 – sjrd

+0

是由语言规范保证的吗? –

回答

5

这个问题似乎只存在于2.11:

Welcome to Scala 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_102). 
Type in expressions for evaluation. Or try :help. 
scala> object ~ { def foo = 0 } 
defined object $tilde 

scala> ~.foo 
<console>:1: error: illegal start of simple expression 
~.foo 
^ 

在2.12正常工作:

Welcome to Scala 2.12.0 (OpenJDK 64-Bit Server VM, Java 1.8.0_102). 
Type in expressions for evaluation. Or try :help. 
> object ~ { def foo = 0 } 
defined object $tilde 
> ~.foo 
res0: Int = 0 
+0

我刚刚在2.11.8上试过了,它不... –

+0

有趣。我的确在尝试2.11.8。 – bdew

+0

此外,它似乎“$ tilde.foo”也可以工作... – bdew

相关问题