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

Ruby initialize method when to use parenthesis

我想了解初始化方法,但在使用括号时遇到问题。在下面的例子中,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

在您的第二个示例中,括号用于括起 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的值。

调用Fruit.new时将使用无参数initialize方法。要使用第二个示例中的那个,您需要在创建对象时为参数 k 提供一个值,Fruit.new("apple")

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

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

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

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"。