2011-07-07 61 views
5

我想要做這樣的事情:Scala:可以引用一個字面嗎?

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

這顯然不爲工作,我不能引用「世界,你好」不首先把它作爲一個VAL。

有沒有辦法實現這個?

+2

您是否期望生產'd'而不是'l'?對不起,只要確定.... –

+0

@射線,我已修復了錯字。 – Rahul

回答

22

如果你只是想字符串的最後一個字符,你可以這樣做:

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

對於一般的問題,您可能需要使用正向管操作,如下圖所示:

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

您可以如下所示定義前進管道運算符,也可以使用斯卡拉斯中可用的管道運算符。

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} 
+0

[Scalaz](http://code.google.com/p/scalaz/)是一個爲Scala提供「類型類和純功能數據結構」的庫,包括'|>'前端管道操作符。 [Google代碼上的文檔和下載](http://code.google.com/p/scalaz/),[GitHub上的源代碼](https://github.com/scalaz/scalaz)。 –

+0

@ RoryO'Kane,如果你仔細觀察,你會注意到我在我的答案中提到了斯卡拉茲。 – missingfaktor

+0

我知道。我提供了Scalaz的鏈接和描述,所以其他人不必像Google那樣去谷歌它。我重複說Scalaz包含'|>'爲了撇油器的好處。 –

3

您不能引用文字本身,但您可以創建一個塊,該塊具有局部的臨時變量。

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

scala> tmp 
<console>:8: error: not found: value tmp 
相關問題