Ruby中这两种方法有什么区别?
class Mod
def doc(str)
...
end
def Mod::doc(aClass)
...
end
end
Run Code Online (Sandbox Code Playgroud) 我知道实例变量与继承无关:
class A
def initialize
@x = 2
end
end
class B < A
def puts_x
puts @x
end
def x=(value)
@x = value
end
end
b = B.new
b.puts_x
b.x=3
b.puts_x
Run Code Online (Sandbox Code Playgroud)
这输出:
2
3
Run Code Online (Sandbox Code Playgroud)
在这里,类B从类继承A,并@x在课堂上B没有任何与继承.
但输出是2.我想了解它.
" Ruby继承 "页面说:
由于实例变量与继承无关,因此子类使用的实例变量不能"遮蔽"超类中的实例变量.如果子类使用与其祖先之一使用的变量同名的实例变量,则它将覆盖其祖先变量的值.
我也想要这方面的任何例子.
我想知道两种情况之间的区别:
module M
# def self.append_features(base)
# if base < self then p true
# else p false
# end
# end
end
class C
include M
end
if C < M then p true
else p false
end
Run Code Online (Sandbox Code Playgroud)
输出是:
true
Run Code Online (Sandbox Code Playgroud)
但如果删除注释,输出结果为:
false
false
Run Code Online (Sandbox Code Playgroud)
为什么输出与以前的输出不同?
ruby ×3