我是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
是否可行?谢谢!
答案 0 :(得分:2)
你需要将“画眉”组合子传递给一个函数,所以下面的工作原理如下:
"asdf" |> length2 |> (_.length)
如果要插入换行符,请将操作符放在行尾:
"asdf" |>
length2 |>
(_.length)
或以下内容也有效:
"asdf"
.|> (length2)
.|> (_.length)
答案 1 :(得分:0)
从Scala 2.13开始,Scala标准库提供了一种EditableText
方法:
MethodChannel
要在Scala 2.11或2.12中使用相同的方法,请添加scala-collection-compat作为依赖项。