Ruby:参数vs变量

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

所以我开始学习ruby,我发现我们可以在一个方法中使用默认值,这看起来类似于只使用实例变量,除了减少代码行之外,这还有什么重要性或好处吗

//这个

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语言版本