gpt4 book ai didi

Ruby - 与对象的特征类共享局部变量

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

我正在尝试在已初始化的 Ruby 对象上动态定义方法 MyObject基于哈希 my_hash我传递给它的 initialize方法。在 initialize 的正文中方法,我有以下内容:

my_hash.each do |key|
class << self
define_method(key.underscore.to_sym) do
my_hash[key]
end
end
end

这失败了 undefined local variable or method 'key' for #<Class:#<MyObject:0x007fc7abw0cra0>> .有什么想法吗?

my_hash由带有大量驼峰键的 json 响应组成,因此使用简单的 ruby​​ 方法来获取我想要的值会更方便。

最佳答案

局部变量在它们定义的范围内是局部的。Ruby 中的(词法)范围是脚本范围、模块/类定义范围、方法定义范围和 block 范围。只有 block 作用域嵌套在它们的外部作用域中(也就是关闭它们周围的作用域)。所以,你必须使用一个 block :

my_hash.each_key do |key|
singleton_class.class_eval do
define_method(key.to_sym) do
my_hash[key]
end
end
end

或者更好的是:

my_hash.each_key do |key|
define_singleton_method(key.underscore.to_sym) do
my_hash[key]
end
end

注意:我还修复了一个错误,您应该使用 each_key 迭代键,而不是 each(each_pair 的别名) ).

关于Ruby - 与对象的特征类共享局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28137065/

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