3
A
回答
5
一些特殊功能,呼叫類型Scala中
命名參數:
命名參數允許您將參數傳遞給函數在不同order.For例如:
def speed(distance: Float, time: Float): Float = distance/time
而且它可以像這樣使用:
speed(distance = 100, time = 10)
個
或
speed(time = 10, distance = 100)
默認參數:
斯卡拉讓您爲函數參數指定默認值。例如:
def printTime(out: java.io.PrintStream = Console.out) =
out.println("time = "+ System.currentTimeMillis())
然後就可以調用printTime而無須給予任何輸出流是這樣的:
printTime()
反覆論證:
斯卡拉允許您指出的最後一個參數一個功能可能會重複。例如:
def echo(args: String*) =
for (arg <- args)
println(arg)
然後你可以使用它像這樣:
echo()
echo("one")
echo("hello", "world!")
1
默認參數解決了其他編程語言通常用方法重載解決的問題。當有一個方法
def addNumbers(a: Int, b: Int, c: Int, d: Int) = a+b+c+d
使用多個參數它可以在重載的方法來設置一些默認值提供了一個API,更容易使用,如果一個人不希望填補所有參數有用:
def addNumbers(a: Int, b: Int, c: Int) = addNumbers(a, b, c, 0)
def addNumbers(a: Int, b: Int) = addNumbers(a, b, 0, 0)
在默認參數它不再需要重載這樣的方法:
def addNumbers(a: Int, b: Int, c: Int = 0, d: Int = 0) = a+b+c+d
編譯器自動調用與特定默認爲arg的方法如果他們沒有指定uments:
scala> addNumbers(1, 2, 3)
res2: Int = 6
的默認參數一個有用的地方是在構造函數中。這是比較容易寫
class A(i: Int, s: String = "")
比
class A(i: Int, s: String) {
def this(i: Int) = this(i, "")
}
在另一邊命名的參數可以改善方法調用的可讀性:
def compute(xs: List[Int], executeInParallel: Boolean) = ???
compute(xs, executeInParallel = true)
更容易閱讀僅比compute(xs, true)
可以隨時指定參數的名稱,而不管其順序如何。這意味着compute(executeInParallel = true, xs = xs)
與compute(xs, true)
相同。編譯器通常只需要一個提示,當參數的排序改變時,哪個參數必須放置在哪個位置。
一個用例,其中兩個命名和默認參數可以在case類,其是由編譯器自動生成的複製方法中使用在於:
scala> case class Person(name: String, age: Int)
defined class Person
scala> val p = Person("Ruben", 43)
p: Person = Person(Ruben,43)
scala> val oneYearOlder = p.copy(age = p.age+1)
oneYearOlder: Person = Person(Ruben,44)
這可能是重要的提到命名參數只適用於在Scala中定義的方法。在Java中定義的方法參數不能通過名稱來調用。
而且命名參數不要在函數文本工作:
scala> val f = (i: Int) => i
f: Int => Int = <function1>
scala> f(i = 1)
<console>:9: error: not found: value i
f(i = 1)
^
欲瞭解更多信息,這個功能可以去看一下docs.scala-lang.org。
相關問題
- 1. Python中的命名參數和默認參數類參數
- 2. Groovy命名和默認參數
- 3. 爲什麼非默認參數不能遵循默認參數?
- 4. pandas.read_csv命名參數na_values默認值
- 5. 命名參數沒有默認值?
- 6. 功能命名參數問題默認
- 7. WPF中的命令綁定的默認參數是什麼?
- 8. 什麼是MapRoute命名空間參數?
- 9. 函數的一個未命名參數是否有默認值?
- 10. 什麼是r值參考參數的正確默認值?
- 11. 爲什麼不能默認參數取決於非默認參數?
- 12. 默認參數和非默認參數的順序
- 13. 默認參數++
- 14. 默認參數
- 15. 默認參數
- 16. 默認參數
- 17. 默認參數
- 18. 默認參數
- 19. 默認參數
- 20. 爲什麼C++不允許參數成爲默認參數?
- 21. 默認參數和模板
- 22. 什麼是函數默認模板參數
- 23. 參數化構造函數的默認值是什麼意思?
- 24. 默認參數函數簽名更改
- 25. 允許單個參數和默認安全參數?強參數
- 26. Ruby中的命名參數(命名方法參數,關鍵字參數)的當前狀態是什麼?
- 27. 將命令行參數作爲默認函數參數
- 28. 參數與默認值和關鍵字參數有什麼區別?
- 29. JVM默認參數
- 30. g ++默認參數