Ruby 模块中不包括类函数

Ruby 模块中不包括类函数,ruby,Ruby,试图将我自己的函数(比如check)注入Float类。当我从一个模块执行操作时,它不会被注入到Float类中。请参阅以下代码片段 irb(main):001:0> module QA irb(main):002:1> class Float irb(main):003:2> def self.check irb(main):004:3> end irb(main):005:2> end irb(main):006:1> end =>

试图将我自己的函数(比如check)注入Float类。当我从一个模块执行操作时,它不会被注入到Float类中。请参阅以下代码片段

irb(main):001:0> module QA
irb(main):002:1>   class Float
irb(main):003:2>     def self.check
irb(main):004:3>     end
irb(main):005:2>   end
irb(main):006:1> end
=> nil
irb(main):007:0> include QA
=> Object
irb(main):008:0> Float.respond_to?(:check)
=> false
irb(main):009:0> extend QA
=> main
irb(main):010:0> Float.respond_to?(:check)
=> false
irb(main):011:0> class Float
irb(main):012:1>   def self.check
irb(main):013:2>   end
irb(main):014:1> end
=> nil
irb(main):015:0> Float.respond_to?(:check)
=> true
这:

正在创建/修改类
QA::Float
,而不是
Float
。试着做

QA::Float.respond_to?(:check)
你会看到的

您可以这样做:

module QA
    def self.included(klass)
        Float.class_eval "def self.check;end"
    end
end

include QA
Float.respond_to?(:check)
# true
一些有用的参考资料:

    • 这是:

      正在创建/修改类
      QA::Float
      ,而不是
      Float
      。试着做

      QA::Float.respond_to?(:check)
      
      你会看到的

      您可以这样做:

      module QA
          def self.included(klass)
              Float.class_eval "def self.check;end"
          end
      end
      
      include QA
      Float.respond_to?(:check)
      # true
      
      一些有用的参考资料:


      您已将该方法添加到
      QA::Float
      类,而不是
      Float
      类。如果要将该方法添加到
      Float
      类中,应该执行以下操作

      module QA
        class ::Float
          # stuff
        end
      end
      
      或者更好的是

      class Float
        # stuff
      end
      

      您已将该方法添加到
      QA::Float
      类,而不是
      Float
      类。如果要将该方法添加到
      Float
      类中,应该执行以下操作

      module QA
        class ::Float
          # stuff
        end
      end
      
      或者更好的是

      class Float
        # stuff
      end
      

      @Harikrishnan R,据我记忆所及,
      在类名将这个类引用到它的父类之前,它是
      对象
      ,但是默认情况下,我们实际上可以只键入
      类Float
      来表示
      类::Float
      。CMIIW Jorg&mu。@Harikrishnan R,据我记忆所及,
      在类名将这个类引用到它的父类之前,它是
      对象
      ,但默认情况下,我们实际上可以键入
      类浮点
      来表示
      类::浮点
      。CMIIW Jorg&mu。