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. pandas.read_csv命名参数na_values默认值
- 2. 命名参数没有默认值?
- 3. 功能命名参数问题默认
- 4. 什么是MapRoute命名空间参数?
- 5. 默认参数和非默认参数的顺序
- 6. 默认参数
- 7. 默认参数
- 8. 默认参数
- 9. 默认参数++
- 10. 什么是函数默认模板参数
- 11. 参数化构造函数的默认值是什么意思?
- 12. 默认参数函数签名更改
- 13. JVM默认参数
- 14. g ++默认参数
- 15. 默认值参数
- 16. C#默认参数
- 17. Javascript默认参数
- 18. PyArg_ParseTuple默认参数
- 19. 默认参数3.0
- 20. 参数与默认值和关键字参数有什么区别?
- 21. 如何为命名函数参数设置默认值?
- 22. Scala类构造函数的默认参数命名
- 23. 为bash命令设置默认参数
- 24. 查询中的位置和命名参数是什么意思?
- 25. 为什么要命名返回参数?
- 26. 斯卡拉命名并结合默认参数与隐含参数
- 27. Javascript参数:有许多默认参数
- 28. ES6默认参数在参数
- 29. plot()函数默认参数
- 30. PyQt5默认参数后的非默认参数?