Ruby:从方法参数中检索值
我正试图弄明白如何在Ruby中创建一个方法,从该方法的参数(如字符串/整数)中检索值 例如,如果这是一个用C编码的函数,那么它的执行方式可能类似于: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
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
干杯!iRuby是通过值传递的。总是。没有例外。在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中,总是传递指针,但指针是隐式的。