我试图弄清楚如何在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
干杯!我
答案 0 :(得分: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
当然,您可以使用Array
而不是编写自己的MutableCell
课程,这只是为了演示。
然而,一般来说,可变状态是一个坏主意,而传递给方法的变异参数尤其是真的坏主意。方法知道他们自己的对象(即self
),因此可以安全地修改它,但对于其他对象,这通常是禁止的。