【发布时间】:2011-07-07 05:12:15
【问题描述】:
我想做这样的事情:
scala> "Hello world"(this.length -1)
res30: Char = d
这显然不起作用,因为如果不先将“Hello world”存储为 val,我就无法引用它。
有什么方法可以实现吗?
【问题讨论】:
标签: scala
我想做这样的事情:
scala> "Hello world"(this.length -1)
res30: Char = d
这显然不起作用,因为如果不先将“Hello world”存储为 val,我就无法引用它。
有什么方法可以实现吗?
【问题讨论】:
标签: scala
如果你只想要字符串的最后一个字符,你可以这样做:
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}
【讨论】:
|> 正向管道运算符。 Documentation and downloads on Google Code, source code on GitHub.
|> 是为了让撇油器受益。
您不能引用文字本身,但您可以使用该块本地的临时变量创建一个块。
scala> val lastChar = { val tmp = "Hello World"; tmp(tmp.length - 1) }
lastChar: Char = d
scala> tmp
<console>:8: error: not found: value tmp
【讨论】: