【问题标题】:Scala unbound placeholder parameterScala 未绑定占位符参数
【发布时间】:2013-05-17 07:17:49
【问题描述】:

我正在使用以下代码来满足我的需求:

 (1 to 5)..map(i => s"\\x${i}")  // Produces List("\\x1", "\\x2", "\\x3", "\\x4", "\\x5")

但我想使用占位符。根据the string interpolator documentation

(1 to 5).map(s"\\x${_}")

应该扩展为:

(1 to 5).map(StringContext("\\\\x","").s(_))

但后者有效,前者无效,后者在_ 上抛出一个error: unbound placeholder parameter。为什么?

【问题讨论】:

    标签: scala scala-2.10 string-interpolation


    【解决方案1】:

    我相信语法:

    (1 to 5).map(s"\\x${_}")
    

    编译器认为 _ 属于 s 函数,在这种情况下它将不起作用。您可以通过执行以下操作轻松解决此问题:

    (1 to 5).map(i => s"\\x${i}")
    

    您可能想查看link,以进一步了解与匿名函数相关的占位符规则。

    编辑: 根据这篇文章,占位符语法曾经可以工作,所以这可能是一个回归错误或一个从未打算以这种方式工作的功能:https://groups.google.com/forum/#!msg/scala-internals/G_54LGj0zpg/REZfyXZ6-RwJ

    【讨论】:

    • 我添加了我已经在我的问题中直接使用的解决方案。如果可能的话,我想拥有的不仅仅是信仰。 s 不是函数,它是 Scala 特性。
    • @MikaëlMayer 好吧,不,这不是语言功能。它在这里定义:scala-lang.org/api/current/#scala.StringContext 你也可以使用 raw"", f"" 甚至创建自己的字符串插值器 (json"", sql"",...)
    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多