Ruby on rails 定义类似于rails的链接ruby方法定义
我正在研究Rails文档。在中,它们指定带有链的方法定义,如下所示:Ruby on rails 定义类似于rails的链接ruby方法定义,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在研究Rails文档。在中,它们指定带有链的方法定义,如下所示: class Project < ActiveRecord::Base def portfolio.nil? ... end end 项目#公文包.nil 我觉得这很奇怪。似乎有一个实例方法定义上有一个链式方法。例如:Project#portfolio.nil?将定义一个如下所示的实例方法: class Project < ActiveRecord::Base def portfolio.n
class Project < ActiveRecord::Base
def portfolio.nil?
...
end
end
项目#公文包.nil
我觉得这很奇怪。似乎有一个实例方法定义上有一个链式方法。例如:Project#portfolio.nil?
将定义一个如下所示的实例方法:
class Project < ActiveRecord::Base
def portfolio.nil?
...
end
end
然而,这不起作用。出现名称错误
NameError:未定义的局部变量或Dog:Class的方法“speak”
如果它真的有效:那么我会尝试Dog.new.speak.fetch
。我不确定它会返回什么。也许它会回来:
=> woof woof!
=> go get the ball!
问题:是否有可能以某种方式定义实例方法定义,并在其上加上这样的链?如果不是:rails是如何做到的?以
Project#portfolio.nil?
为例:Rails如何定义#portfolio.nil?
?让我们从一件基本的事情开始:
在Ruby中,没有原语。一切都是物体。人人都有一个
公共祖先,对象类
所以,当您使用点表示法时,您可以从对象调用方法
当您使用nil?
时,这意味着您调用方法来检查对象是否等于nil。您可以从任何对象调用此方法:
Object.nil? # => false
在您的代码中,您有项目
模型,该模型具有关联Portofolio
class Project < ActiveRecord::Base
belongs_to :portfolio
end
结束语:当你调用任何方法时,你都是从某个对象调用它。让我们从一件基本的事情开始:
在Ruby中,没有原语。一切都是物体。人人都有一个
公共祖先,对象类
所以,当您使用点表示法时,您可以从对象调用方法
当您使用nil?
时,这意味着您调用方法来检查对象是否等于nil。您可以从任何对象调用此方法:
Object.nil? # => false
在您的代码中,您有项目
模型,该模型具有关联Portofolio
class Project < ActiveRecord::Base
belongs_to :portfolio
end
结束语:当您调用任何方法时,您都是从某个对象调用它。这只是Rails文档中的一个bug(或者,让我们称之为一个有点误导性的措辞)。引自:
project类现在有以下方法(以及更多方法)来简化其关系的遍历和操作:
Project#portfolio,Project#portfolio=(portfolio),Project#portfolio.nil?
该列表中的第三项显然只是提示nil
是关系属性的有效值
(问题的答案是“否”,您不能在Ruby中定义一系列方法,只需一个def
)这只是Rails文档中的一个bug(或者,让我们称之为有点误导性的措辞)。引自:
project类现在有以下方法(以及更多方法)来简化其关系的遍历和操作:
Project#portfolio,Project#portfolio=(portfolio),Project#portfolio.nil?
该列表中的第三项显然只是提示nil
是关系属性的有效值
(问题的答案是“否”,你不能在一个def
中定义Ruby中的方法链)我认为他的意思是文档将Project\portfolio.nil?
列为一个单独的方法。这令人困惑。这怎么可能是一个方法名称?是:如前所述:portfolio.nil怎么可能?有一个方法名吗?我想他的意思是文档将Project#portfolio.nil?
列为一个单独的方法。这令人困惑。这怎么可能是一个方法名称?是:如前所述:portfolio.nil怎么可能?是一个方法名吗?