Scala – 理解涉及currying的代码片段
发布时间:2020-12-16 18:20:02 所属栏目:安全 来源:网络整理
导读:我是 scala的新手,我在理解currying方面遇到了一些麻烦 – 我现在正在通过编写简单的函数来练习,并且需要澄清以下内容 def mul (a: Int) (b: Int): Int = { { a * b } } 以上功能定义是否与以下相同? def mul: Int = Int = Int = { (a: Int) = { (b: Int) =
我是
scala的新手,我在理解currying方面遇到了一些麻烦 – 我现在正在通过编写简单的函数来练习,并且需要澄清以下内容
def mul (a: Int) (b: Int): Int = { { a * b } } 以上功能定义是否与以下相同? def mul: Int => Int => Int = { (a: Int) => { (b: Int) => a * b } } 从语法中我可以将mul解释为接受整数的函数,并返回接受整数并返回整数的函数.但我不确定我的解释是否真的正确.有关上述示例或curried函数语法的任何解释都将非常有用. 解决方法
你的解释是正确的.但你不需要所有那些支撑.
def mul(a: Int)(b: Int) = a*b val mulAB = (a: Int) => { (b: Int) => a*b } // Same as mul _ val mul5B = (b: Int) => 5*b // Same as mulAb(5) or mul(5) _ 通常,您可以将具有多个参数的任何函数重写为curried链,其中每个参数生成一个函数,该函数在最后一个实际生成值之前需要少一个参数: f(a: A,b: B,c: C,d: D): E <===> A => B => C => D => E 在Scala中,自然分组是通过参数块,而不是通过单个参数,因此 f(a: A)(b: B,c: C)(d: D): E <===> A => (B,C) => D => E (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |