Ruby on rails 你有什么反应?当self可以调用该方法时返回false,并且super似乎忽略对输入的更改
我对调试器输出的结果感到困惑<代码>url_标准化者做了我认为会做的事情。但是我不明白为什么Ruby on rails 你有什么反应?当self可以调用该方法时返回false,并且super似乎忽略对输入的更改,ruby-on-rails,ruby,Ruby On Rails,Ruby,我对调试器输出的结果感到困惑url_标准化者做了我认为会做的事情。但是我不明白为什么self不会响应模块添加的方法,或者为什么属性path没有使用添加的尾部斜杠保存 module Standardizers def url_standardizers(url_fragment) url_fragment = url_fragment.strip url_fragment << "/" if url_fragment !~ /\/\z/ url_fragm
self
不会响应模块添加的方法,或者为什么属性path
没有使用添加的尾部斜杠保存
module Standardizers
def url_standardizers(url_fragment)
url_fragment = url_fragment.strip
url_fragment << "/" if url_fragment !~ /\/\z/
url_fragment.downcase
end
module_function :url_standardizers
...
end
class Article < ApplicationRecord
include Standardizers
17: def path=(pathname)
18: byebug
=> 19: super(url_standardizers(pathname))
20: end
21:
(byebug) url_standardizers(pathname)
"fewew/"
(byebug) self.respond_to? :url_standardizers
false
(byebug) c
=> "fewew"
模块标准化器
def url_标准化器(url_片段)
url\u fragment=url\u fragment.strip
url_片段19:super(url_标准化程序(路径名))
20:完
21:
(byebug)url_标准化程序(路径名)
“fewew/”
(byebug)self.response_to?:url_标准化者
假的
(byebug)c
=>“fewew”
<代码> > p>由于代码>模块函数创建了一个私有实例方法(根据),考虑使用<代码> PrimaTyMyMead定义的< <代码> >:
(byebug) self.respond_to? :url_standardizers
false
(byebug) self.class.private_method_defined? :url_standardizers
true
正如Stefan在评论中提到的那样,respond\u to?
采用了一种可以用来获取私有方法的方法:
(byebug) self.respond_to?(:url_standardizers, true)
true
什么是c
?但是,是的,很有趣…module\u函数
创建了一个私有实例方法,并且respond\u to?
默认情况下不包括私有方法。@Stefan:该死,这又让我明白了:)要么是那个,要么是respond\u?(url\u standardizers,true)