Ruby中的继承场景
我在Ruby中有以下代码:Ruby中的继承场景,ruby,oop,Ruby,Oop,我在Ruby中有以下代码: class Base def Function1 puts 'Base Function1' end def Function2 Function1 end end class Derived < Base def Function1 puts 'Derived Function1' end end obj = Derived.new obj.Function2 当我使用self调用Function1时,它
class Base
def Function1
puts 'Base Function1'
end
def Function2
Function1
end
end
class Derived < Base
def Function1
puts 'Derived Function1'
end
end
obj = Derived.new
obj.Function2
当我使用self
调用Function1
时,它工作了,我得到了输出:
Derived Function1
你能帮我理解为什么会这样吗。我认为self
在Ruby中是隐含的。常量(包括类
es)是用大写
编写的,方法/函数是用小写
编写的。这与继承无关,请考虑:
def Foo
puts 'Foo'
end
Foo
# NameError: uninitialized constant Foo
这是因为当Ruby看到大写标记时,它会寻找一个常量,就是它。您可以通过使用括号()
明确地告诉Ruby查找方法,但不要这样做:
Foo()
# Foo
请改用小写的方法名。然后,您的代码将按预期工作:
class Base
def function1
puts 'Base function1'
end
def function2
function1
end
end
class Derived < Base
def function1
puts 'Derived function1'
end
end
obj = Derived.new
obj.function2
常量(包括类
es)用大写
编写,方法/函数用小写
编写。这与继承无关,请考虑:
def Foo
puts 'Foo'
end
Foo
# NameError: uninitialized constant Foo
这是因为当Ruby看到大写标记时,它会寻找一个常量,就是它。您可以通过使用括号()
明确地告诉Ruby查找方法,但不要这样做:
Foo()
# Foo
请改用小写的方法名。然后,您的代码将按预期工作:
class Base
def function1
puts 'Base function1'
end
def function2
function1
end
end
class Derived < Base
def function1
puts 'Derived function1'
end
end
obj = Derived.new
obj.function2
Ruby中的约定是常量以大写字母开头,而方法是小写的。试着调用你的函数
function1
等等。会发生什么?Ruby的惯例是常量以大写字母开头,而方法是小写的。尝试调用您的函数function1
等。会发生什么?