模块中不包含类函数

时间:2011-07-24 22:33:10

标签: 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
=> 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

2 个答案:

答案 0 :(得分:2)

此:

module QA
  class Float
    def self.check
    end
  end
end

正在创建/修改课程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

一些有用的参考资料:

答案 1 :(得分:2)

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

module QA
  class ::Float
    # stuff
  end
end

甚至更好

class Float
  # stuff
end