Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中的继承场景_Ruby_Oop - Fatal编程技术网

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时,它

我在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
时,它工作了,我得到了输出:

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
等。会发生什么?