尝试将自己的函数(比如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
答案 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