gpt4 book ai didi

ruby - define_method 不返回任何结果

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

我有很多方法完全相同,但需要为每个方法定义一个特定的名称。因此,我在调用每个单独的 format_ 方法的方法中尝试了以下操作:

['street', 'postcode', 'email', 'type', 'subtype', 'dsc', 'duration'].each do |attribute|
define_method("self.format_#{attribute}") do |value|
return cleanup(value)
end
end

以前,我对数组中的每个元素都有一个单独的方法:

def self.format_street value
return cleanup(value)
end

如何获取第一个 block 来为数组中的每个元素生成方法?


这里是基于 Andrew Marshall 的回答的新实现:

def self.analyze_input! formatted_information, category

analyzed_information = {}
attributes = eval(category).attributes

['inst_number', 'name', 'head_of_department', 'street', 'city', 'phone', 'classification', 'sub_classification'].each do |attribute|
define_singleton_method(:"analyze_#{attribute}") do |value|
value
end
end

formatted_information.each do |key, value|
if attributes.include?(key)
analyzed_information[:"#{key}"] = send("analyze_#{key}", value)
end
end

end

最佳答案

self. 放在被定义的方法的名称中并没有你想要的效果,它实际上创建了一个完全具有该名称的方法:

define_method(:'self.foo') { 'bar' }
self.foo # undefined method
send('self.foo') #=> "bar"

而是省略 self. 并使用 define_singleton_method :

attributes = %w[street postcode email type subtype dsc duration]
attributes.each do |attribute|
define_singleton_method(:"format_#{attribute}") do |value|
cleanup(value)
end
end

您还必须在代码块中省略显式的 return,因为它将从方法 返回,而不是代码块。隐式返回就足够了。

关于ruby - define_method 不返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316761/

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