includeããmoduleã®const_missingã¯å®è¡ãããªãã®ã
ã¢ã¸ã¥ã¼ã«ã§å®ç¾©ããã¦ããªã宿°ãåç §ããã¨ããModule#const_missingãå®è¡ããã¾ãã
module A AAA = "AAA" def self.const_missing(id) return "BBB" if id == :BBB raise "not found." end end puts A::AAA puts A::BBB
å®è¡çµæã§ãã
- AAAã¯å®æ°ã¨ãã¦å®ç¾©ããã¦ããã®ã§æ®éã«åç §ã§ãã
- BBBã¯æªå®ç¾©ãªã®ã§const_missingãèµ·åãå é¨ã®å¦çã§"BBB"ãè¿ããã¦ãã¾ãã
AAA BBB
ããã¾ã§ã¯ãããã§ãããåé¡ã¯module Aãincludeããå ´åã
class X include A def hoge puts AAA puts BBB end end X.new.hoge
å®è¡çµæã§ããAAAã®æ¹ã¯åç §å¯è½ã§ãããBBBã®æ¹ã¯NameErrorã«ãªãã¾ããã©ãããã®å ´åã¯Module#const_missingã¯å¼ã³åºãããªãããã ã»ã»ã»ã
AAA C:/xxx/include.rb:17:in `hoge': uninitialized constant X::BBB (NameError) from C:/xxx/include.rb:21
前に作ったプロキシモジュールãincludeããã¨ãã¯ã¾ãå¯è½æ§ãé«ãã®ã§ã注æã