有谁知道如何将方法称为字符串?例如:
case @setting.truck_identification
when "Make"
t.make
when "VIN"
t.VIN
when "Model"
t.model
when "Registration"
t.registration
.to_sym
似乎不起作用。
有谁知道如何将方法称为字符串?例如:
case @setting.truck_identification
when "Make"
t.make
when "VIN"
t.VIN
when "Model"
t.model
when "Registration"
t.registration
.to_sym
似乎不起作用。
使用.send
:
t.send @setting.truck_identification.downcase
(vin
应该是小写的它才能工作)
您将要使用Object#send
,但您需要使用正确的大小写来调用它。例如:
[1,2,3].send('length')
=> 3
编辑:此外,虽然我会犹豫推荐它,因为这似乎是会导致意外错误的不良做法,但您可以通过搜索对象支持的方法列表来处理不同的大小写。
method = [1,2,3].methods.grep(/LENGth/i).first
[1,2,3].send(method) if method
=> 3
我们使用不区分大小写的正则表达式对所有方法进行 grep,然后将第一个返回的符号发送到对象(如果找到)。
您可以使用Object#send
method 将方法名称作为字符串传递。例如:
t.send(@setting.truck_identification)
您可能需要使用String#downcase
方法规范化 truck_identification。
遍历这些方法并不是最干净的方法。只需使用#respond_to?()
method = @setting.truck_identification.downcase
if t.respond_to?(method)
t.send(method)
end