如何在 Scala 中以流式设计函数

How to design function in flow style in scala

假设我有一个具有两个函数的 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")

扩展字符串,使用隐式 class,

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

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

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

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