编程语言
首页 > 编程语言> > c – void foo(int&x) – > Ruby?通过引用传递整数?

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

作者:互联网

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

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

void swap(int &a,int &b){
  int c=b;
  b=a;
  a=c
}

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

解决方法:

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

这里有几个链接:

> Java is Pass-by-Value, Dammit! (Scott “JavaDude” Stanchfield)
> Parameter passing in Java (Jon Skeet)
> Does Java pass by reference?
> Java, pass-by-value, reference variables

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

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

> Ruby按值传递引用.但该句中的“引用”一词与“引用引用”中的“引用”一词并不相同.当我们消除歧义时,可能更清楚:让我们将“传递参考”替换为“传递变量”和“参考”替换为“指针”(注意这些是“好的”表现良好的指针,而不是“坏” “来自C的人):

> Fortran是按变量传递的
> Ruby是按值传递的,它传递的值主要是poointers

> Ruby传递的引用(poointers)指向可变对象.因此,虽然您无法更改引用,但可以改变引用指向的对象.这里的问题是Ruby(像大多数命令式面向对象语言一样)混淆了身份,状态和价值的概念.您可以在此处了解有关该问题以及如何解决此问题的更多信息(请注意,虽然他们说“Clojure”,但所呈现的概念是通用的,并且可以同样适用于OO):

> Persistent Data Structures and Managed References – Clojure’s Approach to Identity and State – Rich Hickey – QCon London 2009
> Are We There Yet? – A deconstruction of object-oriented time – Rich Hickey – JVM Language Summit

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

标签:c,ruby,translation,pass-by-reference
来源: https://codeday.me/bug/20191008/1874128.html