gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:25:27 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

Ruby 是严格按值传递的。总是。但有时这些值是指针。

这里有几个链接:

请注意,虽然所有这些都说“Java”,但它们实际上应该说“Smalltalk 及其后代”,其中包括 Java、Ruby 和大量其他语言。

我认为大部分的困惑源于两个问题:

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

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

关于c++ - void foo(int &x) -> ruby ?通过引用传递整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2650634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com