在Scala中编写一个函数,在不使用临时变量的情况下就地交换一个数字。函数参数是不可变的,那么我们如何避免使用临时变量来实现函数呢?
C/C++的解决方案是:
void swap(int a, int b) {
a = a - b;
b = b + a;
a = b - a;
cout << a << " " << b << endl;
}
如果我没弄错的话,在def swap(a: Int, b: Int): Unit
中a和b都是不可变的,那么在Scala中会有什么等价的解决方案呢?
发布于 2019-04-01 09:02:13
正如已经确定的那样,它不能作为方法或函数来完成。您可以做的是创建一个带有构造函数参数的class
,该参数可以是可变的。
class Swap(var a:Int, var b:Int) {
a ^= b
b ^= a
a ^= b
println(s"a:$a, b:$b")
}
现在,每次创建新的Swap
实例时,都会交换构造函数参数的值。
val myswap = new Swap(4, 579) //sends "a:579, b:4" to STDOUT
这是一个相当无意义的练习。
https://stackoverflow.com/questions/55445999
复制相似问题