如何在scala中设计流式样功能

时间:2015-03-26 06:27:51

标签: scala functional-programming

假设我有一个带有两个函数的util对象

object t {

  def funA(input:String,x:Int):String = "hello"*x

  def funB(input:String,tail:String):String = input + ":" + tail

}

如果我跑

funB(funA("x",3),"tail")

我得到了结果= xxx:tail

问题是如何设计这两个函数然后我可以用如下的流式调用它们:

" X" funA(3)funB(" tail")

2 个答案:

答案 0 :(得分:2)

使用隐式类扩展字符串

implicit class CustomString(str: String) {
    def funcA(count:Int) = str * count
    def funB(tail:String):String = str + ":" + tail
  }

  println("x".funcA(3).funB("tail"))

答案 1 :(得分:0)

对于具有String字段的案例类(对应于原始函数的第一个参数),

case class StringOps(s: String) {
  def funA(x:Int):String = s*x
  def funB(tail:String):String = s + ":" + tail
}

并隐含将String转换为StringOps

implicit def String2StringOps(s: String) = StringOps(s)

您可以启用以下用途,

scala> "hello" funA 3
hellohellohello

scala> "hello" funA 3 funB "tail"
hellohellohello:tail