【问题标题】:How can I convert a String to a Symbol in Runtime in Scala?如何在 Scala 的运行时将字符串转换为符号?
【发布时间】:2014-01-14 02:10:50
【问题描述】:

我有一个看起来像这样的案例类:

case class Outcome(text: Symbol)

现在我需要在运行时更改文本的值。我尝试做这样的事情:

val o2 = o1.copy(text.name = "foo" ++ text.name)

这显然给了我一个编译错误:

type mismatch; found : String required: Symbol

如何将符号转换为字符串、追加/前置内容并再次将其更改为符号?或者更简单地说,如何更改符号的名称?

【问题讨论】:

    标签: string scala symbols


    【解决方案1】:

    您可以使用Symbol.apply 方法:

    Symbol("a" + "b")
    // Symbol = 'ab
    
    val o2 = o1.copy(text = Symbol("foo" + o1.text.name))
    

    scalaz - Lens 中有一个用于处理嵌套结构的有用工具

    import scalaz._, Scalaz._
    
    case class Outcome(symbol: Symbol)
    val symbolName = Lens.lensu[Symbol, String]( (_, str) => Symbol(str), _.name)
    val outcomeSymbol =
      Lens.lensu[Outcome, Symbol]( (o, s) => o.copy(symbol = s), _.symbol)
    val outcomeSymbolName = outcomeSymbol >=> symbolName
    
    val o = Outcome('Bar)
    
    val o2 = outcomeSymbolName.mod("foo" + _, o)
    // o2: Outcome = Outcome('fooBar)
    

    【讨论】:

      猜你喜欢
      • 2016-03-26
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      相关资源
      最近更新 更多