gpt4 book ai didi

ruby - define_method 的一些问题

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

所以我正在尝试这段代码,

class Colors
def initialize color
color.each {|c| color c}
end

def color c
self.class.send(:define_method, "about_#{c}") do
puts "The color #{c} has an intensity of #{Random.rand}"
end
end
end

a = Colors.new(["orange", "pink", "yellow", "green"])
a.about_pink
a.about_pink
a.about_pink

在我的机器上我得到:

The color pink has an intensity of  0.377090691263002
The color pink has an intensity of 0.8375972769713161
The color pink has an intensity of 0.26820920750202837

问题是打印了 4 个语句,每个语句的编号都不同。打印的所有语句不应该包含相同的随机数,因为方法只被“定义”一次吗?

最佳答案

您要做的是在定义方法时评估 Random。这样,定义的方法的值是固定的:

class Colors
def initialize color
@int = {}
color.each {|c| color c}
end

def color c
intensity = Random.rand
self.class.send(:define_method, "about_#{c}") do
puts "The color #{c} has an intensity of #{intensity}"
end
end
end

a = Colors.new(["orange", "pink", "yellow", "green"])
a.about_pink
a.about_pink
a.about_pink

如您所见,我将 Random 的结果保存在一个变量中,该变量在内部上下文中是固定的。在您的初始示例中发生的事情是,您输出的字符串在每次调用中都会得到评估,并且该评估在其中调用了 Random,因此它每次都会运行它。

关于ruby - define_method 的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20867853/

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