16

这有效

(x => s"$x")

但是这个

(s"${_}")

结果是

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

这是泄漏抽象的情况吗?

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

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

1 回答 1

6

在我看来,将字符串插值称为泄漏抽象是完全正确的。虽然它在大多数情况下都能正常工作,但在许多极端情况下,它并不能按照人们期望的方式工作。这是这种边缘情况的另一种化身。

我不知道为什么s"$_"编译器不接受。前段时间有一个 pull request 介绍了这种用于模式匹配的语法:PR 2823

有趣的是,这个 PR 还包含测试模式匹配之外的下划线是否会产生错误的测试用例。

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

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

于 2013-11-10T22:54:40.747 回答