【问题标题】:Scala: Can a literal reference itself?Scala:文字可以引用自身吗?
【发布时间】:2011-07-07 05:12:15
【问题描述】:

我想做这样的事情:

scala> "Hello world"(this.length -1)
res30: Char = d

这显然不起作用,因为如果不先将“Hello world”存储为 val,我就无法引用它。

有什么方法可以实现吗?

【问题讨论】:

    标签: scala


    【解决方案1】:

    如果你只想要字符串的最后一个字符,你可以这样做:

    scala> "Hello World".last
    res0: Char = d
    

    对于一般问题,您可能希望使用正向管道运算符,如下所示:

    scala> "Hello World" |> { t => t(t.length - 1)  }
    res1: Char = d
    

    您可以定义如下所示的正向管道运算符,或者使用 Scalaz 中可用的那个。

    scala> implicit def anyWithPipe[A](a: A) = new {
         |   def |>[B](f: A => B): B = f(a)
         | }
    anyWithPipe: [A](a: A)java.lang.Object{def |>[B](f: (A) => B): B}
    

    【讨论】:

    • Scalaz 是一个为 Scala 提供“类型类和纯函数式数据结构”的库,包括 |> 正向管道运算符。 Documentation and downloads on Google Code, source code on GitHub.
    • @RoryO'Kane,如果你仔细观察,你会注意到我在回答中提到了 Scalaz。
    • 我知道。我提供了 Scalaz 的链接和描述,这样其他人就不必像我一样用谷歌搜索它。我重复说 Scalaz 包含 |> 是为了让撇油器受益。
    【解决方案2】:

    您不能引用文字本身,但您可以使用该块本地的临时变量创建一个块。

    scala> val lastChar = { val tmp = "Hello World"; tmp(tmp.length - 1) }
    lastChar: Char = d
    
    scala> tmp
    <console>:8: error: not found: value tmp
    

    【讨论】:

      猜你喜欢
      • 2011-06-14
      • 2019-01-21
      • 2014-06-17
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      相关资源
      最近更新 更多