首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >send()在Ruby中做什么?

send()在Ruby中做什么?
EN

Stack Overflow用户
提问于 2010-07-27 01:22:42
回答 5查看 110.1K关注 0票数 116

有没有人能告诉我

send("#{Model.find...}")

现在和现在是吗?

EN

回答 5

Stack Overflow用户

发布于 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
票数 78
EN

Stack Overflow用户

发布于 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
票数 16
EN

Stack Overflow用户

发布于 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元编程时非常方便,因为这允许我们根据不同的需求调用不同的方法。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3337285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档