Ruby初始化方法何时使用括号

时间:2015-08-22 19:03:41

标签: ruby initialization

我正在尝试理解初始化方法,但是在使用括号时遇到了麻烦。在以下示例from here中,它们在括号中不使用“apple”和“ripe”,但在第二个示例中,它们仅使用(k)。我们如何知道在什么情况下使用括号?

class Fruit
    def initialize
        @kind = "apple"
        @condition = "ripe"
    end
end

class Fruit
   def initialize( k )
     @kind = k
     @condition = "ripe"
   end
end

2 个答案:

答案 0 :(得分:3)

在第二个示例中,括号用于括起initialize方法的参数列表。

def initialize
    @kind = "apple"
    @condition = "ripe"
end

不带参数。 "apple""ripe"是字符串文字。如果您愿意,可以使用括号,但按惯例省略它们。代码相当于:

def initialize() #no parameters
    @kind = "apple"
    @condition = "ripe"
end

但是为了简洁起见,仅删除括起空参数列表的括号。

在你的第二个例子中:

def initialize( k )
    @kind = k
    @condition = "ripe"
end

@kind初始化为参数k的值。

当您致电initialize时,将使用无参数Fruit.new方法。要使用第二个示例中的一个,您需要在创建对象k

时为参数Fruit.new("apple")提供值

答案 1 :(得分:2)

很简单。如果你需要,比如说,在类的初始化方法中为某些变量设置一些默认值,你根本不需要使用括号,只需将变量值设置为方法即可。这正是他们所做的:

def initialize
|     @kind = "apple"
|     @condition = "ripe"
|   end

例如,如果您需要为一个或多个变量设置自定义值,则可能需要使用括号将自定义值作为参数传递给对象创建调用,如同(您可以使用as)许多变量在括号中作为您要发送的自定义值):

def initialize( k )
|     @kind = k
|     @condition = "ripe"
|   end

因此,您可以创建对象:

Fruit.new your_custom_value_or_object

如果您没有传递任何参数,您可以在初始化程序方法括号中为参数设置默认值,这正是他们所做的:

def initialize( k="apple" )
|     @kind = k
|     @condition = "ripe"
|   end

如果在创建对象时未传递任何参数,则@kind将设置为" apple"。