为什么不能在字符串插值中使用?

时间:2013-11-10 21:33:18

标签: scala lambda string-interpolation

这有效

(x => s"$x")

但是这个

(s"${_}")

给出

[error] ...: unbound placeholder parameter
[error]   (s"${_}")

这只是因为s"..."构造遭受Leaky Abstraction

此外: (s"$_")以完全不同的输出失败:

[error] ...: invalid string interpolation: `$$', `$'ident or `$'BlockExpr expected
[error]   (s"$_")
[error]      ^
[error] ...: unclosed string literal
[error]   (s"$_")

1 个答案:

答案 0 :(得分:5)

在我看来,调用字符串插值漏洞是完全正确的。虽然它在大多数情况下都能正常工作,但是有许多边缘情况,它不会像人们期望的那样工作。这是另一个这种边缘情况的化身。

我不知道为什么编译器不接受s"$_"。前段时间有一个pull请求为模式匹配引入了这种语法:PR 2823

有趣的是,此PR还包含测试underscore outside of a pattern match produces an error

的测试用例

不幸的是,没有进一步的描述为什么这是按照它的实现方式实现的。

Som Snytt,实施PR的人在SO上活跃,希望他能说出更多信息。