0

我试图弄清楚如何在 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

干杯!我

4

1 回答 1

2

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

当然,你可以只使用 anArray而不是编写自己的MutableCell类,这只是为了演示。

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

于 2013-11-14T16:36:23.970 回答