簡體   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