gpt4 book ai didi

ruby - 在 Ruby 中,如何向对象添加一个可以访问外部范围内变量的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 17:39:36 25 4
gpt4 key购买 nike

我是 Ruby 新手。我正处于尝试用 Ruby 编写东西的阶段,就像用其他语言写东西一样失败。

我正在尝试向一个对象添加一个方法——比方说,一个不起眼的数组。不是所有阵列,只是一个特定的阵列。此方法必须能够访问外部范围内的变量。

我的理解是,我可以使用 def 向对象添加方法,但该方法无法访问外部范围内的变量。为此,我需要使用 lambdaProc.new,但我看不出如何将 lambda/proc 作为属性(property)。

在 JavaScript 中这很简单,正如这个愚蠢的例子所展示的:

var x = 3
var array = [1, 2, 3, 4]

array.multiply_by_x = function() {
var i = this.length
while (i--) {
this[i] *= x
}
}

在 Ruby 中是否可以实现与上述类似的东西?

最佳答案

这里不能使用def关键字来定义方法,因为它会引入另一个作用域。如果你只想为一个特定的对象定义一个方法,那么你必须在单例类中定义它。

x = 3
array = [1, 2, 3, 4]

array.define_singleton_method(:multiply_by_x) do
self.map!{|e| e * x }
end

但是如果您使用的是 Ruby 1.8.x,则必须这样做:

(class << array; self; end).send(:define_method, :multiply_by_x) do
self.map!{|e| e * x }
end

注:与本题无关,但如果你想看different ways to define singleton methods.

关于ruby - 在 Ruby 中,如何向对象添加一个可以访问外部范围内变量的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7721256/

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