黑马,请教个问题

黑马,请教个问题

这是一帖里同学的问题,理解了下,不知道对不对
class AAA
 def b
 puts "b"
 end
 b
end
上面的程序会出错,在运行过程中会说“undefined local variable or method `b' for AAA:Class (NameError)”
当时我想是因为定义的b是实例方法,故在这调用会出错。
所以我认为如果要在这调用则要这样:
class AAA
 def self.b
 puts "b"
 end
 b
end
你怎么解释?
类不能直接调用实例方法.实例方法(实例里进行访问).

[Copy to clipboard] [ - ]
你说的我知道,但我在类里面调用方法是你说的“类直接调用实例方法”么?按照你说的,如:
class AAA
 def a
  puts "a"
 end
end
AAA.a
这样才是类直接调用实例方法,我上面第一个例子是属于“类直接调用方法么”。因为按照一般的思维,你定义了一个方法,在类中都是可以调用的。
还有一个问题,实例方法在这不能调用,怎么self后即类方法在这可以调用。
如果真是你说的,在类定义里面调用实例方法==AAA.a的话,这样也能解释类定义时可以直接调用self方法,因为这样也就等于AAA.self方法。
现在问题应该就是“类定义里面调用实例方法是否==AAA.a”??
我都说了 类不能直接调用实例方法。
你的 实例方法需要实例里进行访问
你 上面写的 那个你 自己试了吗。能那样调用吗?

[Copy to clipboard] [ - ]
333333333333333333333333333

[ 本帖最后由 alanyuqiang 于 2008-7-27 19:43 编辑 ]
引用:
原帖由 刀光剑影 于 2008-7-27 18:10 发表
类不能直接调用实例方法.实例方法(实例里进行访问).C:\>irb
irb(main):001:0> class A
irb(main):002:1> def b
irb(main):003:2> puts "b"
irb(main):004:2> end
irb(main):005:1> a=A.new
irb(main):006:1> a ...
引用:
原帖由 刀光剑影 于 2008-7-27 19:32 发表
我都说了 类不能直接调用实例方法。
你的 实例方法需要实例里进行访问
你 上面写的 那个你 自己试了吗。能那样调用吗?irb(main):001:0> class AAA
irb(main):002:1> def a
irb(main):003:2> puts "a"
irb(main ...
self.a是实例方法吗???
你好好想想。
管理员,你没看清我的问题。是你最先理解错了。我知道什么是实例方法,什么是类方法,这些概念我一清二楚。可能我表达的不准确吧
你都清楚了。那你说说他们的区别,都有那些访问方式。你写个实际的代码列一下。