作为一种为我的C ++编程作业增添趣味的一种方式,我决定不再将书中的C ++输入到我的计算机上,而是用Ruby改进它。是的,这有点傻,但我很无聊。
无论如何,我在将这种功能转换为Ruby时遇到了麻烦
void swap(int &a,int &b){
int c=b;
b=a;
a=c
}
函数中的等效ruby代码是什么?
答案 0 :(得分:6)
Ruby是严格按值传递的。总是。但有时候这些价值观就是那些价值观。
以下是几个链接:
请注意,虽然所有这些都说“Java”,但他们应该说“Smalltalk及其后代”,其中包括Java,Ruby和其他许多语言。
我认为大多数困惑源于两个问题:
答案 1 :(得分:1)
在Ruby中,参数按值传递。因此,以下方法永远不会产生任何影响:
def doesnt_swap(a, b)
c = a
a = b
b = c
end
另一方面,大多数对象都是引用,例如字符串,所以你可以写
def swap_strings(a, b)
c = a.dup
a.replace(b)
b.replace(c)
end
这将交换两个参数的字符串值。
整数是直接的,所以没有等同于replace
;你不能写swap_integers
。
无论如何,在Ruby中,你通过编写a, b = b, a