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