簡體   English   中英

難以理解函數語法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM