Ruby初始化

时间:2016-02-04 02:40:11

标签: ruby initialization

在下面的示例中(source),

class Greeter
  def initialize(name = "World")
    @name = name
  end
  def say_hi
    puts "Hi #{@name}!"
  end
  def say_bye
    puts "Bye #{@name}, come back soon."
  end
end
  1. def initialize(name = "World")在做什么?
  2. @name = name在做什么?是初始化变量name并将初始值设置为name
  3. 我在网站上的示例(更多代码)中没有看到"World"的任何进一步使用,因此我对它的使用感到困惑。

      

    现在让我们创建一个欢迎对象并使用它:

    greeter = Greeter.new("Pat")
    greeter.say_hi
    # => Hi Pat!
    greeter.say_bye
    # => Bye Pat, come back soon.
    

2 个答案:

答案 0 :(得分:1)

了解@name等实例变量与name等局部变量之间的区别非常重要。它们不一样,但容易混淆。

初始化函数最好解释如下:

# Define an initialize method with an argument called name that has
# a default value of "World"
def initialize(name = "World")
  # Assign the value of the name variable, which only exists in the
  # scope of this method, to the name instance variable which exists
  # for the lifespan of this Greeter object.
  @name = name
end

实例变量是Ruby面向对象编程的支柱。它们是在不同方法调用之间持久保存数据的最方便的方法。

要行使默认行为,您根本无法指定name应该是什么:

greeter = Greeter.new
greeter.say_hi

答案 1 :(得分:1)

  
    

<强> 1。什么是def initialize(name = "World")在做什么?

  

当您创建Greeter的新实例时,如果没有传递参数,那么def initialize会将新实例的默认@name属性设置为等于{ {1}}。

  
    

<强> 2。 "World"在做什么?是初始化变量@name = name并将初始值设置为name

  

name是一个实例变量,来自同一个类的其他方法可以查看和使用。在这种情况下,它采用传递给方法的@name参数。有关详细信息,请参阅实例变量

示例

在您的示例name中,参数定义为greeter = Greeter.new("Pat"),因此忽略"Pat"的默认参数。