Ruby中的Splat参数

Ruby Splat参数

我们已经了解了如何在Ruby中使用方法?我们非常清楚方法可能使用也可能不使用任何参数这一事实。让我们讨论消耗参数或具有预定义参数列表的方法。该参数列表可以包含任意数量的参数,但具有强制性,您必须使用方法的参数列表中指定的方法传递相同数量的参数。但是,这降低了代码的通用性,如果您创建了一个将三个数字相加的方法,但是时间要求是仅将两个数字相加会怎样。在这种情况下,您的功能将失败。一种方法是重载该方法,但问题是您可以重载该方法多少次,因为可能存在n种可能性,最终将使您的代码冗余。Ruby有一个很好的概念splat参数,它允许您在方法中传递任意数量的参数Splat参数有两种类型,本文其余部分将进行讨论。

1)单个Splat参数

单个splat参数是通过*运算符实现的。您可以在它们的帮助下传递数组。请参考下面给出的语法,

    def method_name( *args)
        ...
    end

以下示例将帮助您了解其实现,

def mul(*args)
	pro = 1
	args.each do |ar|
	pro = pro * ar
	end
return pro
end

puts "Product is #{mul(12,44,55,33,22,55)}"
puts "Product is #{mul(1.2,4.4,5.5,3.3,2.2,5.5)}"
puts "Product is #{mul(1,2)}"
puts "Product is #{mul(100,45)}"

输出结果

Product is 1159567200
Product is 1159.5672000000002
Product is 2
Product is 4500

您可以在上面的代码中观察到我们已经创建了一个方法,该方法将乘以传入的所有参数。我们正在从splat运算符获取帮助,该操作符允许我们传递所需的尽可能多的参数。我们在每个方法调用中传递了不同数量的参数。如果不是这种情况,那么我们可能必须为不同数量的参数定义不同的方法。

2)Double splat参数

在Ruby 2.0中引入了double splat参数的概念。该实现与单个splat参数非常相似,但是其附加功能也适用于哈希。它在**运算符的帮助下实现。以下是语法,它将告诉您如何使用双splat参数

    def show( **args)
        ...
    end

现在,让我们通过其示例来更好地理解它。

def fruits (**fruits_and_color)
 fruits_and_color.each do |frt, color|
    puts "Fruits: #{frt}"
    puts "Color: #{color}"
   
  end
end

data1 = {
  "Kiwi": "Green",
  "Peach": "Pink",
  "Banana": "Yellow",
  "Grapes": "Green"
}

data2 = {
  "Kiwi": "Green",
  "Peach": "Pink",
  "Banana": "Yellow",
  "Grapes": "Green",
  "Watermelon": "Blue"
}

fruits data1
fruits data2

输出结果

Fruits: Kiwi
Color: Green
Fruits: Peach
Color: Pink
Fruits: Banana
Color: Yellow
Fruits: Grapes
Color: Green
Fruits: Kiwi
Color: Green
Fruits: Peach
Color: Pink
Fruits: Banana
Color: Yellow
Fruits: Grapes
Color: Green
Fruits: Watermelon
Color: Blue
=> {:Kiwi=>"Green", :Peach=>"Pink", :Banana=>"Yellow", :Grapes=>"Green", :Watermelon=>"Blue"

在上面的代码中,您可以看到我们已经创建了两个哈希data1和data2。我们创建了一个方法结果,并将这些具有不同条目数的哈希传递给该方法。