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