传递多个参数的Ruby发送方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

尝试通过以下方式动态创建对象和调用方法

Object.const_get(class_name).new.send(method_name,parameters_array)
Object.const_get(RandomClass).new.send(i_take_arguments,[10.0])
Object.const_get(RandomClass).new.send(i_take_multiple_arguments,[25.0,26.0])

定义的随机类是

class RandomClass
def i_am_method_one
    puts "I am method 1"
end
def i_take_arguments(a)
    puts "the argument passed is #{a}"
end
def i_take_multiple_arguments(b,c)
    puts "the arguments passed are #{b} and #{c}"
end
    end

提问于
用户回答回答于
send("i_take_multiple_arguments", *[25.0,26.0]) #Where star is the "splat" operator

send(:i_take_multiple_arguments, 25.0, 26.0)
用户回答回答于

可以交替使用它的同义词__send__来send:

r = RandomClass.new
r.__send__(:i_take_multiple_arguments, 'a_param', 'b_param')

顺便说一句,你可以通过散列传递哈希,如下所示:

imaginary_object.__send__(:find, :city => "city100")

或新的哈希语法:

imaginary_object.__send__(:find, city: "city100", loc: [-76, 39])

if r.respond_to?(method_name)
    puts r.__send__(method_name)
else
    puts "#{r.to_s} doesn't respond to #{method_name}"
end

扫码关注云+社区