关于Module和include功能

关于Module和include功能

我定义了一个Module大致如下:

[Copy to clipboard] [ - ]
你没有搞清类方法和实例方法的概念。
1、
 class A
   def x
    print "x"
   end
   def self.y
     print"y"
   end
  end
这个时候我们可以直接调用y 但不能直接调用x,因为x这是实例方法,y是类方法。想调用x,必须分配一个A的实例如 t=A.new 然后t.x,module
2、定义一个module
 Module M1
  def self.x
  puts "x"
  end
 def M1.y
  puts "y"
 end
 def z
   puts "z"
 end
end
这个时候,我们能M1.x M1.y调用,
如果在一个class中include了这个module
 class C1
  include M1
 end
则可 c=C1.new c.z 而c.x c.y都是不能调用的。但在C1中可M1.y 调用
原因在于, x方法是以M1定义时对象为接受者,y方法是以M1为接受者,实际上是M1的“类”方法。
3、你想要的是在“顶层”环境直接调用某个方法,那不应该定义在其它任何module或class中,而应该定义在Object中,你可以这么做
 class Object
   def x
    puts "in x"
  end
 end

 Module M1
  def x
    puts "in x"
  end
 end
 class Object
  include M1
 end
如题。我照你说的把module加到了Object里面,但是依旧提示我method missing。

代码如下:

[Copy to clipboard] [ - ]
顺便帮我把ruby打印出来的错误信息解释一下哈~
好好看看错误,不是说没有找到bbBeginBlitz3D这个方法,说明已经mixin入Object类了,提示没找到什么看看是不是你那个方法里面的错误了,debug一下看看。
前面一个警告是说没有初始化一个@SYM变量
可是我写成 Blitz3D.bbBeginBlitz3D 就没有问题了呀,而且运行也正常。
这个方法没有问题的。Blitz3D是一个商业库,许许多多用户都使用过的,我问了,也没有任何Bug……
到底是怎么回事啊~~
(如果你还有耐心帮我的话,我可以把整个目录都发给你的,包括我写的ruby代码和Blitz3D库文件、DLL等;无论如何都谢谢了哈
你的module中的方法是否这样定义的?
module M1
 def M1.x
  ...
 end
end

如果这么定义的,你只要require 这个文件,就可以 M1.x调用了。
如果你的module是
 module M1
    def y
    ...
    end
  end
那我上面的方法是肯定可以的。
能区别出上面两个例子的意思吧?
我们mixin一个module到一个class中,只能混入常量、类变量、实例方法, 也就是说,类方法是混入不了的