Ruby:参数vs变量
所以我开始学习ruby,我发现我们可以在一个方法中使用默认值,这看起来类似于只使用实例变量,除了减少代码行之外,这还有什么重要性或好处吗 //这个Ruby:参数vs变量,ruby,Ruby,所以我开始学习ruby,我发现我们可以在一个方法中使用默认值,这看起来类似于只使用实例变量,除了减少代码行之外,这还有什么重要性或好处吗 //这个 def order_food(price, size="large", quantity = 8) if quantity == 1 extra = "salad" else extra = "Burgers" end puts "#{quantity} #{size} #{extra}, co
def order_food(price, size="large", quantity = 8)
if quantity == 1
extra = "salad"
else
extra = "Burgers"
end
puts "#{quantity} #{size} #{extra}, coming right up!"
end
//对此
def order_food(price)
size = "large"
quantity = 8
if quantity == 1
extra = "salad"
else
extra = "Burgers"
end
puts "#{quantity} #{size} #{extra}, coming right up!"
end
当深入思考这个问题时,我意识到它提供的一个巨大好处是灵活性和可读性。 例如,我可以传入如下参数
order_food(2, "small", 90)
这允许我覆盖默认值,这比在内容更改时必须更改变量要好
order_food(9, "extraLarge")
获取我已设置的默认数量深入思考此问题时,我意识到它提供的最大好处之一是灵活性和可读性。 例如,我可以传入如下参数
order_food(2, "small", 90)
这允许我覆盖默认值,这比在内容更改时必须更改变量要好
order_food(9, "extraLarge")
获取我设置的默认数量首先,变量是局部变量而不是实例变量。实例变量属于类的实例,并用
@var\u name
符号表示,而局部变量属于一个范围(非常简单地说,就是由do…end
包围的任何变量),并且只用变量名(my\u var=“some\u value”
)表示
这取决于您使用该方法的目的。如果希望能够传递参数quantity
和size
,则应使用第一个参数。如果您尝试传递多个参数,则第二个参数将为您提供和ArgumentError
。第一个将设置quantity=8
和size=“large”
的值(如果未通过),但如果通过,则将使用通过的值
如果希望能够调用该方法并将size和quantity设置为参数,并且如果未传递它们,请使用size=“large”
和quantity=8
作为默认值,请使用第一种方法:
order_food "9.00" #=> "8 large burgers, coming right up!"
order_food "9.00", "small", 1 #=> "1 small salad, coming right up!"
第二种方法将不允许您传递其他两个参数中的任何一个,它们将始终设置为quantity=8
和size=“large”
。这有它的好处,因为有时您不希望变量可以随参数更改。第二种方法是:
order_food "9.00" #=> "8 large burgers, coming right up!"
order_food "9.00", "small", 1 #=> ArgumentError: wrong number of arguments (given 3, expected 1)
首先,变量是局部变量而不是实例变量。实例变量属于类的实例,并用
@var\u name
符号表示,而局部变量属于一个范围(非常简单地说,就是由do…end
包围的任何变量),并且只用变量名(my\u var=“some\u value”
)表示
这取决于您使用该方法的目的。如果希望能够传递参数quantity
和size
,则应使用第一个参数。如果您尝试传递多个参数,则第二个参数将为您提供和ArgumentError
。第一个将设置quantity=8
和size=“large”
的值(如果未通过),但如果通过,则将使用通过的值
如果希望能够调用该方法并将size和quantity设置为参数,并且如果未传递它们,请使用size=“large”
和quantity=8
作为默认值,请使用第一种方法:
order_food "9.00" #=> "8 large burgers, coming right up!"
order_food "9.00", "small", 1 #=> "1 small salad, coming right up!"
第二种方法将不允许您传递其他两个参数中的任何一个,它们将始终设置为quantity=8
和size=“large”
。这有它的好处,因为有时您不希望变量可以随参数更改。第二种方法是:
order_food "9.00" #=> "8 large burgers, coming right up!"
order_food "9.00", "small", 1 #=> ArgumentError: wrong number of arguments (given 3, expected 1)
它与实例变量不同。实例变量具有类实例的作用域,并使用
@
符号声明
例如:
class MyClass
def initialise
@my_instance_variable = 'hello world'
end
def method_one
puts "I have access to the instance variable and it is #{@my_instance_variable}"
end
end
您所展示的都是仅用于方法范围的局部变量声明,但是其中一个正在为您的方法定义参数,而另一个没有
def order\u食品(价格,size=“大”,数量=8)
是否不等于:
def order_food(price)
size = "large"
quantity = 8
虽然大小和数量都是变量,并且都只适用于order\u food
方法,但第一个是将它们声明为方法可以接受的参数,因此可以这样调用:
order_food(5, 'small', 2)
而在第二个示例中,这些不能由被调用方设置-它们固定为“大”和8
不需要用默认值声明方法参数,但这样做被调用方就不需要提供它们,而是使用默认值。因此,对于方法声明:
def order\u食品(价格,size=“大”,数量=8)
您可以拨打以下电话:
order_food price: 10, quantity: 2 #will use default size with value 'large'
order_food price: 5, size: 'small' #will use default quantity of 8
它与实例变量不同。实例变量具有类实例的作用域,并使用
@
符号声明
例如:
class MyClass
def initialise
@my_instance_variable = 'hello world'
end
def method_one
puts "I have access to the instance variable and it is #{@my_instance_variable}"
end
end
您所展示的都是仅用于方法范围的局部变量声明,但是其中一个正在为您的方法定义参数,而另一个没有
def order\u食品(价格,size=“大”,数量=8)
是否不等于:
def order_food(price)
size = "large"
quantity = 8
虽然大小和数量都是变量,并且都只适用于order\u food
方法,但第一个是将它们声明为方法可以接受的参数,因此可以这样调用:
order_food(5, 'small', 2)
而在第二个示例中,这些不能由被调用方设置-它们固定为“大”和8
不需要用默认值声明方法参数,但这样做被调用方就不需要提供它们,而是使用默认值。因此,对于方法声明:
def order\u食品(价格,size=“大”,数量=8)
您可以拨打以下电话:
order_food price: 10, quantity: 2 #will use default size with value 'large'
order_food price: 5, size: 'small' #will use default quantity of 8
这是一个重新修改过的c语言版本