我正在尝试理解初始化方法,但是在使用括号时遇到了麻烦。在以下示例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
答案 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"。