void foo(int&x) - > Ruby?通过引用传递整数?

Ear*_*rlz 2 c++ ruby translation pass-by-reference

作为一种为我的C++编程作业增添趣味的一种方式,我决定不再将书中的C++输入到我的计算机上,而是将其改为Ruby.是的,这有点傻,但我很无聊.

无论如何,我在将这种功能转换为Ruby时遇到了麻烦

void swap(int &a,int &b){
  int c=b;
  b=a;
  a=c
}
Run Code Online (Sandbox Code Playgroud)

函数中等效的ruby代码什么?

Jör*_*tag 6

Ruby是严格按值传递的.总是.但有时候这些价值观就是那些价值观.

这里有几个链接:

请注意,虽然所有这些都说"Java",但他们应该说"Smalltalk及其后代",其中包括Java,Ruby和许多其他语言.

我认为大多数混乱源于两个问题:

  1. Ruby按值传递引用.但该句中的"引用"一词与"引用引用"中的"引用"一词并不相同.当我们消除歧义时,可能更清楚:让我们将"传递参考"替换为"传递变量"和"参考"替换为"指针"(注意这些是"好的"表现良好的指针,而不是"坏" "来自C的人):
    • Fortran是按变量传递的
    • Ruby是按值传递的,它传递的值主要是poointers
  2. Ruby传递的引用(poointers)指向可变对象.因此,虽然您无法更改引用,但可以改变引用指向的对象.这里的问题是Ruby(像大多数命令式面向对象语言一样)混淆了身份,状态和价值的概念.您可以在此处了解有关该问题以及如何解决此问题的更多信息(请注意,虽然他们说"Clojure",但所呈现的概念是通用的,并且可以同样适用于OO):

顺便说一句:我故意用面向对象的OO拼错"poointers"以明确我不是在谈论原始内存地址,我说的是对象的不透明引用(并且出于显而易见的原因我不想使用这个词"参考";如果你知道一个更好的词既不是"指针"也不是"参考",我很乐意听到它.