为什么Scala会在标识符中分隔符号和字母,我可以更改它吗?

时间:2013-02-08 16:18:01

标签: scala

我正在考虑将Scala用于内部DSL(即DSL实际上是Scala)用于音乐创作。我想使用标识符,如尖锐的符号,♯(U + 266F)。看起来这是不可能的:

val c♯0 = 13

不解析。我能得到的最接近的是:

val c0_♯ = 13

我不喜欢它。强制标识符这样命名的理由是什么?

1 个答案:

答案 0 :(得分:5)

Scala的语法试图迎合许多相互冲突的要求。为了在“类似运算符”的方法名称(例如+/::)之间选择任意空格以及它们在任何一方的参数,必须有一个表示给定名称包含标点符号和字母数字字符混合的方式。

请记住,内部DSL不是新语言!他们充其量只是成为新语言的幻想。他们仍然是斯卡拉。

如果您希望完全自由地控制您向用户提供的语言,您可以编写组合子解析器或使用外部解析器生成器。

对于参与Scala语言处理的任何人,我强烈建议您在编写自己的,专注于狭义的单一用途语言处理代码之前查看Kiama。凯马是一颗宝石!