gpt4 book ai didi

ruby - 有没有办法从该实例内部为 Ruby 类的实例创建方法?

转载 作者:数据小太阳 更新时间:2023-10-29 06:22:05 26 4
gpt4 key购买 nike

class Example 定义为:

class Example
def initialize(test='hey')
self.class.send(:define_method, :say_hello, lambda { test })
end
end

调用 Example.new; Example.new 我收到一个 警告:方法已重新定义;丢弃旧的 say_hello。我得出结论,这一定是因为它在实际类中定义了一个方法(从语法上看是有道理的)。当然,如果 Example 的多个实例在其方法中具有不同的值,那将是灾难性的。

有没有办法从实例内部为类的实例创建方法?

最佳答案

您需要获取对实例的单例类(包含所有实例特定内容的类)的引用,并在其上定义方法。在 ruby​​ 1.8 中,它看起来有点乱。 (如果您找到更清洁的解决方案,请告诉我!)

ruby 1.8

class Example
def initialize(test='hey')
singleton = class << self; self end
singleton.send :define_method, :say_hello, lambda { test }
end
end

但是,Ruby 1.9 提供了一种更简单的方法。

ruby 1.9

class Example
def initialize(test='hey')
define_singleton_method :say_hello, lambda { test }
end
end

关于ruby - 有没有办法从该实例内部为 Ruby 类的实例创建方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3026943/

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