2016-11-17 67 views
0

我是Scala的新手,但我有一些使用OCaml的經驗。我想通過下面方式Scalaz定義的管道運營商:斯卡拉茲管道操作員連接列表方法

import scalaz._ 
import Scalaz._ 

def test = { 
    def length2(x:String) = List(x.length * 2) 
    "asdasd" |> length2 
} 

上面的代碼工作正常。然而,當我想填補另一個函數來獲得list的長度,它拋出一個編譯錯誤:

def test = { 
    def length2(x:String) = List(x.length * 2) 
    "asdasd" |> length2 
    .length <======== I cannot do this... 
} 

此外,我可以把|>運營商在另一條線?喜歡這個?

def test = { 
    def length2(x:String) = List(x.length * 2) 
    "asdasd" 
    |> length2   <====== I cannot do this... 
} 

目前,我不知道該怎麼做上面兩件事Scala。我真的很抱歉,如果這個問題太天真了..但誰能告訴我是否可行Scala?謝謝!

回答

2

你需要通過「畫眉」 Combinator的一個功能,所以以下工作:

"asdf" |> length2 |> (_.length) 

如果要插入換行符,把運營商在該行的末尾:

"asdf" |> 
length2 |> 
(_.length) 

或以下也是正確的:

"asdf" 
.|> (length2) 
.|> (_.length) 
+0

這正是我想要的。非常感謝! – computereasy

+0

但是,似乎無法在左邊用「|>」對齊「語句是可惜的.. – computereasy