Scalaz管道运算符与列表方法相关联

时间:2016-11-17 00:50:35

标签: scala

我是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 个答案:

答案 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作为依赖项。