给定一个示例闭包,在这种情况下,它返回字符串中的单词数(带有附加的任意运算符)。
val myfunc = (s: String) => Option(s).map(_.split(" ").size).filter(_ >= 2)
有没有办法可以隐藏一些样板,以便我可以编写:
val myfunc = given[String].map(_.split(" ").size).filter(_ >= 2)
给定一个示例闭包,在这种情况下,它返回字符串中的单词数(带有附加的任意运算符)。
val myfunc = (s: String) => Option(s).map(_.split(" ").size).filter(_ >= 2)
有没有办法可以隐藏一些样板,以便我可以编写:
val myfunc = given[String].map(_.split(" ").size).filter(_ >= 2)
如果您可以使用两个括号和一个下划线,则不需要宏:
class Given[A] {
def apply[B](f: Option[A] => B): A => B = (a: A) => f(Option(a))
}
def given[A] = new Given[A]
在行动:
scala> val myfunc = given[String](_.map(_.split(" ").size).filter(_ >= 2))
myfunc: String => Option[Int] = <function1>
scala> List("salmon cod herring","tuna").map(myfunc)
res4: List[Option[Int]] = List(Some(3), None)
我怀疑。宏用类型检查的东西替换它所在的函数调用。那么,given[String]
在你的例子中你会用什么代替?如果你用 替换它(s: String) => Option(s)
,你会得到这个:
((s: String) => Option(s)).map(_.split(" ").size).filter(_ >= 2)
这不像你想要的那样工作。您希望更改整条生产线,但这是不会发生的。