Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 你有什么反应?当self可以调用该方法时返回false,并且super似乎忽略对输入的更改_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 你有什么反应?当self可以调用该方法时返回false,并且super似乎忽略对输入的更改

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

我对调试器输出的结果感到困惑<代码>url_标准化者做了我认为会做的事情。但是我不明白为什么
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)