繁体   English   中英

def compose [A,B,C](f:B => C,g:A => B):A => C = {f(g(_))}是不是有效的Scala声明?

[英]def compose[A,B,C](f: B => C, g: A => B): A => C = {f(g(_))} is noty valid scala declaration?

我是scala的新手,这可能是一个轻而易举的概念,但试图了解原因

def compose[A,B,C](f: B => C, g: A => B): A => C = {f(g(_))}

是不是有效的scala decation?

尝试

def compose[A,B,C](f: B => C, g: A => B): A => C = { a: A => f(g(a)) }

下划线-占位符语法不一致,尤其是在像您在此处的嵌套函数调用中不起作用。 一条好的经验法则是,如果下划线语法有误,请尝试将其扩展为显式lambda,然后查看其是否有效。

因为f(g(_))在Scala中表示f(x => g(x)) ,而不是x => f(g(x))

您需要为接收函数g的变量分配一个名称:

def compose[A,B,C](f: B => C, g: A => B): A => C = {x => f(g(x))}

您还可以执行以下操作(我已将函数名重命名以使其与众不同):

def myCompose[A,B,C](f: B => C, g: A => B): A => C = f compose g

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM