gpt4 book ai didi

ruby - 在运行时在 ruby​​ 中从模板定义方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:57:45 28 4
gpt4 key购买 nike

假设我有以下类(class):

class Foo
attr_accessor :name, :age
end

class Bar
def initialize(name)
@foo = Foo.new
@foo.name = name
end
end

我想在 Bar 上定义一个访问器,它只是 foo.name 的别名。很简单:

def name
@foo.name
end

def name=(value)
@foo.name = value
end

只有一个属性,这很容易。但是,假设 Foo 公开了几个我想通过 Bar 公开的属性。我不想手动定义每个方法,而是想做这样的事情,尽管我知道语法不正确:

[:name, :age].each do |method|
def method
@foo.method
end

def method=(value)
@foo.method = value
end
end

那么...这样定义方法的正确方法是什么?

最佳答案

要动态定义方法,您可以使用 define_method,它将方法名称作为符号或字符串参数。

要动态调用方法,您可以使用 send,它也将方法名称作为符号或字符串。

[:name, :age].each do |method|
define_method(method) do
@foo.send(method)
end

define_method("#{method}=") do |value|
@foo.send("#{method}=", value)
end
end

关于ruby - 在运行时在 ruby​​ 中从模板定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4810480/

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