有没有人能告诉我
send("#{Model.find...}")
现在和现在是吗?
发布于 2014-10-04 22:31:59
我认为.send方法最有用的特性之一是它可以动态地调用方法。这可以节省你大量的打字时间。.send方法最流行的用法之一是动态分配属性。例如:
class Car
attr_accessor :make, :model, :year
end
要定期分配属性,需要执行以下操作
c = Car.new
c.make="Honda"
c.model="CRV"
c.year="2014"
或者使用.send方法:
c.send("make=", "Honda")
c.send("model=", "CRV")
c.send("year=","2014")
但它可以全部替换为以下内容:
假设您的Rails应用程序需要从用户输入中将属性分配给您的汽车类,您可以这样做
c = Car.new()
params.each do |key, value|
c.send("#{key}=", value)
end
发布于 2017-02-05 00:39:46
另一个示例,类似于Antonio Jha的https://stackoverflow.com/a/26193804/1897857
是否需要读取对象的属性。
例如,如果你有一个字符串数组,如果你试图遍历它们并在你的对象上调用它们,它就不会起作用。
atts = ['name', 'description']
@project = Project.first
atts.each do |a|
puts @project.a
end
# => NoMethodError: undefined method `a'
但是,您可以将字符串send
到对象:
atts = ['name', 'description']
@project = Project.first
atts.each do |a|
puts @project.send(a)
end
# => Vandalay Project
# => A very important project
发布于 2019-03-30 15:46:43
发送是做什么的?
send
是“调用方法”的另一种方式。示例:
o = Object.new
o.send(:to_s) # => "#<Object:0x00005614d7a24fa3>"
# is equivalent to:
o.to_s # => "#<Object:0x00005614d7a24fa3>"
Send lives in the Object class。
这有什么好处?
这种方法的好处是,您可以传入要作为参数调用的方法。下面是一个简单的例子:
def dynamically_call_a_method(method_name)
o = Object.new
o.send method_name
end
dynamically_call_a_method(:to_s) # => "#<Object:0x00005614d7a24fa3>"
您可以传入希望被调用的方法。在本例中,我们传入了:to_s
。这在做ruby元编程时非常方便,因为这允许我们根据不同的需求调用不同的方法。
https://stackoverflow.com/questions/3337285
复制相似问题