[英]Difficulty understanding function syntax
我能理解這一點:
scala> def f(i: Int) = "dude: " + i
f: (i: Int)java.lang.String
scala> f(3)
res30: java.lang.String = dude: 3
它定義了一個函數f,它接受一個int並返回一個dude形式的字符串:+傳入的int。
現在可以像這樣指定相同的函數:
val f: Int => String = x => "dude: " + x
scala> f(3)
res31: String = dude: 3
=>
String = x
是什么意思? 我想當你想在Scala中定義一些東西時你會做x:String
嗎? 你應該把它解析為
val (f: Int => String) = (x => "dude: " + x)
因此它指定f具有類型(Int => String)
並且被定義為匿名函數,該函數接受Int
參數(x)
並返回String
。
只是澄清了一下。 def
語句定義方法,而不是函數。
現在,為功能。 你可以這樣寫:
val f: (Int => String) = x => "dude: " + x
它可以被解讀為“f是從Int到String的函數”。 所以,回答你的問題,a =>
在一個類型的位置意味着函數從一個類型到另一個類型,而=>
在一個值的位置意味着獲取參數identifier
並返回expression
。
此外,它還可以依賴於類型推導者:
val f = (x:Int) => "dude: " + x
李和pedrofurla都給出了很好的答案。 我還要補充一點,如果你想將你的方法轉換為函數(作為參數傳遞,用作部分應用函數等),你可以使用魔術下划線:
def foo(i: Int) = "dude: " + x
val bar = foo _ // now you have a function bar of type Int => String
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.