Scala方法是具有名称的代码块,可以接受来自调用该方法的代码中的变量。
语法:
def method_name (parameter_list){ // 码 }
方法接受的变量称为参数。将参数传递给方法的方式称为参数传递。
在Scala中,有两种方法可以在调用方法时传递参数:
按值致电
用名字打电话
在Scala中传递参数的按值调用方法中-将副本传递给该方法。这意味着传递给方法的参数与实际值无关。这些参数称为形式参数。形式参数中所做的更改不会反映在实际参数中(调用方法时传递的值)。
声明为通过值参数传递来接受调用的方法的样本,
def add(a:Int , b:Int){ var sum = a + b ; println("sum = " + sum); }
该调用将传递将复制到变量a和b的值,并且对a和b的操作将独立于传递的实际值。
程序演示一个CALL BY VALUE示例
object MyClass { //函数定义 def add(x: Int){ var sum = x + 1 println("sum = "+sum) }; def main(args: Array[String]) { var a = 34 //函数调用 add(a) } }
输出结果
sum = 35
在scala中传递的参数的按名称调用方法还会传递变量的内存地址,而不是其值。因此,该程序将在相同的变量上工作。由于基于地址的参数传递,变量的地址将传递给将执行功能的方法。
声明接受名称参数传递的调用的方法的样本,
def add(a: => Int , b: => Int){ var sum = a + b; println("sum = " + sum); }
该调用将复制所传递变量的内存地址,并且实际变量用于处理。
程序演示一个CALL BY NAME示例
object MyClass { def add(x: => Int){ var sum = x + 1 println("sum = "+sum) }; def main(args: Array[String]) { var a = 34 add(a) } }
输出结果
sum = 35
为什么不交换功能?
交换函数是表示在编程中使用按值调用和按名称调用的最常见示例。
在Scala中,函数的参数是val,即不可变,这意味着您无法在函数中重新初始化它们。让我们陷入一种最不容易了解差异的方法的情况。因此,创建经典程序只是为了给您带来差异。现在,考虑以下代码,该代码尝试重新初始化Scala的参数。
object MyClass { def add(a: => Int){ a = x + 1 println("sum = "+a) }; def main(args: Array[String]) { var a = 34 add(a) } }
输出结果
error: reassignment to val a = x + 1 ^ one error found