scala - 以语法一致的方式将 args 传递给 n 个参数的 fns
问题描述
Scalaz 有一个画眉操作符,|>
定义如下:
implicit class ThrushOps[A](self: A) {
def |>[B](f: A ⇒ B): B = f(self)
}
我有几个不同参数的函数:
def f1(x:Int)=x+1
def f2(a:Int, b:Int)=(a+1,b+1)
def f3(a:Int, b:Int, c:Int)=(a+1,b+1,c+1)
如果它们有 1 个或多个 args,我可以调用它们的方式在语法上是不同的:
4 |> f1
(1,2) |> (f2 _).tupled
(1,2,3) |> (f3 _).tupled
从句法的角度来看,有什么方法可以使调用带有一个参数的函数与调用带有 n 个参数的函数一致?
我希望能够写作
4 |> f1
(1,2) |> f2
解决方案
使用适用:
implicit class ThrushOps[A](self: A) {
def |>[B](f: A ⇒ B): B = if (self.isInstanceOf[Product]) f.apply(self) else f(self)
}
您还可以使用清单来执行更准确的检查
推荐阅读
- reactjs - 如何在 Reactjs 中使用 Content Loader
- python - Pandas pivot_table 删除行
- angular - Angular 等待函数执行完毕
- c# - 无法使用 DataGridTemplateColumn 在 Datagrid 中插入行
- jenkins - 通过 jenkins-cli 安装本地插件
- html - 如何将 svg 和按钮并排放置并垂直对齐?
- instagram - 验证该帐户属于索赔人
- kotlin - Kotlin - 相同条件:多个 if 语句或一个 if 语句
- node.js - [Koa]404 在通过路由器时
- c# - IRepository 和工作单元与急切加载