Scala基础学习:prod与lift高阶函数返回实现疑问
完整实现代码
你给出的代码里函数签名和实现块之间遗漏了等号=,属于语法错误,修正后的完整实现如下:
def compose[A,B,C](f: A => B)(g: B => C): A => C = { a: A => g(f(a)) } def prod[A,B,C,D](f: A => C, g: B => D): (A, B) => (C, D) = { (a: A, b: B) => (f(a), g(b)) } def lift[A,T](op: (T,T) => T)(f: A => T, g: A => T): A => T = { (a: A) => op(f(a), g(a)) }
逻辑说明
prod函数
prod的作用是将两个独立的单参数函数,组合为一个处理二元元组的函数:
- 接收元组的两个输入值
a和b - 分别将
a传给f、b传给g做计算 - 将两个计算结果组装为新的二元元组返回即可
举个实际调用示例:
val f: Int => String = _.toString val g: Boolean => Int = if (_) 1 else 0 // 调用prod组合后的函数,输入(123, false),返回("123", 0) prod(f, g)(123, false)
lift函数
lift的作用是将一个针对T类型的二元操作,提升为针对「返回T类型的单参数函数」的组合操作:
- 接收同一个输入值
a - 分别用
f和g对a做计算,得到两个T类型的结果 - 将两个结果传入
op做运算,返回最终结果即可
举个实际调用示例:
val op: (Int, Int) => Int = _ + _ val f: String => Int = _.length val g: String => Int = _.toInt // 调用lift组合后的函数,输入"123",计算3+123返回126 lift(op)(f, g)("123")
内容的提问来源于stack exchange,提问作者Tsubasa00
相关产品推荐
相关产品推荐

