gpt4 book ai didi

Ruby 传递方法(?)作为参数?

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

在 Ruby 中,我有一大堆从数据库返回信息的方法:州、国家、语言、种族等的列表,用于申请表的选项。我知道从表单中选择的 ID,并且正在编写方法从 ID 中获取名称:

def state_name(state_id)
Db.states.select{ |s| s['id'] == state_id.to_i }.first['name']
end

def country_name(country_id)
Db.countries.select{ |c| c['id'] == country_id.to_i }.first['name']
end

等他们有很多。如何使用 1 种方法进行简化,该方法传入我想要获取名称的项目类型名称(州、国家/地区等),而不是一遍又一遍地重复自己?

最佳答案

你可以用元编程解决这个问题:

class SomeClass
def self.define_name_method(thing, plural)
define_method :"#{thing}_name" do |id|
Db.send(plural).select {|x| x['id'] == id.to_i }.first['name']
end
end

define_name_method :state, :states
define_name_method :country, :countries
end

SomeClass.new.state_name(19749387) #=> "Oregon"

或者用更通用的方法:

class SomeClass
def thing_name(plural, id)
Db.send(plural).select{|x| x['id'] == id.to_i }.first['name']
end
end

SomeClass.new.thing_name(:countries, 1239394) #=> "Estonia"

关于Ruby 传递方法(?)作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27573590/

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