【问题标题】:Short for String.format in ScalaScala 中 String.format 的缩写
【发布时间】:2011-10-10 18:11:51
【问题描述】:

Scala 中是否有用于字符串插值的简短语法?比如:

"my name is %s" < "jhonny"

而不是

"my name is %s" format "jhonny"

【问题讨论】:

  • 给你的新词汇:字符串插值(我最近自己学会了)..
  • 哦,谢谢。我会把它添加到问题中。
  • 是的,我也发现了这个:stackoverflow.com/questions/2481459/…
  • 不确定是否应该删除该问题或将其标记为重复。有些人(像我一样)可能正在寻找 String.format 而不是正式的术语 :)
  • 你永远不会知道,Scala 可能还会得到字符串插值:github.com/scala/scala/commit/…

标签: string scala


【解决方案1】:

没有,但你可以自己添加:

scala> implicit def betterString(s:String) = new { def %(as:Any*)=s.format(as:_*) }
betterString: (s: String)java.lang.Object{def %(as: Any*): String}

scala> "%s" % "hello"
res3: String = hello

请注意,您不能使用 &lt;,因为这会与 Predef 中已经定义的不同隐式转换发生冲突。

【讨论】:

    【解决方案2】:

    如果你想知道什么语法可能正在开发中

    $ ./scala -nobootcp -Xexperimental
    Welcome to Scala version 2.10.0.r25815-b20111011020241 
    
    scala> val s = "jhonny"
    s: String = jhonny
    
    scala> "my name is \{ s }"
    res0: String = my name is jhonny
    

    再玩一下:

    scala> "those things \{ "ne\{ "ts".reverse }" }"
    res9: String = those things nest
    
    scala> println("Hello \{ readLine("Who am I speaking to?") }")
    Who am I speaking to?[typed Bozo here]Hello Bozo
    

    【讨论】:

      【解决方案3】:

      我似乎记得 Martin Odersky 曾被引述说“Scala 编程”中介绍的风格的字符串连接是插值的有用近似。这个想法是,没有空格,每次替换只使用几个额外的字符。例如:

      val x     = "Mork"
      val y     = "Ork"
      
      val intro = "my name is"+x+", I come from "+y
      

      然而,格式化方法提供了更多的功能。 Daniel Sobral 也写了一篇关于 regex based 技术的博客。

      【讨论】:

      • 连接的问题是有时你会丢失整个字符串的“视图”。例如“%s://%s”格式(协议、主机)对我来说看起来更干净。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多