Scala:文字引用本身可以吗?

时间:2011-07-07 05:12:16

标签: scala

我想做这样的事情:

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

这显然不起作用,因为我没有先将它存储为val来引用“Hello world”。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:22)

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

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}

答案 1 :(得分:3)

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

scala> val lastChar = { val tmp = "Hello World"; tmp(tmp.length - 1) }
lastChar: Char = d

scala> tmp
<console>:8: error: not found: value tmp