Ruby:从方法参数中检索值

Ruby:从方法参数中检索值,ruby,Ruby,我正试图弄明白如何在Ruby中创建一个方法,从该方法的参数(如字符串/整数)中检索值 例如,如果这是一个用C编码的函数,那么它的执行方式可能类似于: main() { int value; GetAnIntegerValue(value); printf("The value is %d", value); } // The "value" integer variable is passed to it, and updated accordingly because

我正试图弄明白如何在Ruby中创建一个方法,从该方法的参数(如字符串/整数)中检索值

例如,如果这是一个用C编码的函数,那么它的执行方式可能类似于:

main()
{
    int value;
    GetAnIntegerValue(value);
    printf("The value is %d", value);
}

// The "value" integer variable is passed to it, and updated accordingly because of the use of the ampersand prior to the parameter
GetAnIntegerValue(&int value)
{
    value = 5;
}

// The output would be "The value is 5"
我认为这个术语是通过值传递的,但我不确定。我在这方面的想法有点模糊,我找不到很多好的结果

下面是我的示例Ruby函数,参数分配到的数组只是类的本地数组,这就是使用该函数的原因:

    def getRandomWordAndHint(&RandomWord, &RandomHint)
    randIndex = rand(7)
    RandomWord = EnglishLevel1Word[randIndex]
    RandomHint = EnglishLevel1Hint[randIndex]
end

干杯!i

Ruby是通过值传递的。总是。没有例外。在Ruby中不能通过引用传递

您可以做的是将要更改的对象放入某种可变容器中:

class MutableCell
  attr_accessor :val

  def initialize(val)
    self.val = val
  end
end

def change_the_value(cell)
  cell.val = 5
end

value = MutableCell.new(42)

change_the_value(value)

value.val
# => 5
当然,您可以使用
数组
而不是编写自己的
可变单元格
类,这只是为了演示


然而,可变状态通常是一个坏主意,而对传递给方法的参数进行变异则是一个非常坏的主意。方法知道他们自己的对象(即
self
),因此可以安全地修改它,但对于其他对象,这通常是不可能的。

我想我在另一个问题中读到了关于“传递值”是什么意思的辩论。将对象传递给方法仍然是按值传递吗?@Keikoku:Ruby是按值传递。总是。没有例外。它根本不支持按引用传递。时期如果是这样,那么这个问题就不会出现了。我一直认为“按值传递”意味着参数的副本是在方法的范围内创建的,并且不会影响原始数据。传递对象不是通过引用传递吗?通过引用传递意味着引用本身,即本例中的变量,被传递并且可以被操作。但Ruby中的情况并非如此。Ruby不传递引用,它传递通过取消引用获得的值。然后复制该值。恰好值是一个指针,并且原始指针和复制的指针都指向同一个对象,因此可以通过跟随这两个指针中的任何一个来查看对该对象的修改。但是所传递的内容(一个int、一个指针、一个对象)是不相关的。它是如何传递的。如果您熟悉C,可以这样想:C是按值传递的,但您可以传递值或指向值的指针。无论如何,它仍然是按值传递的。在Ruby中,总是传递指针,但指针是隐式的。