splat net_Ruby中的Splat参数

splat net

Ruby Splat参数 (Ruby Splat Arguments)

We have learnt how to work with methods in Ruby? We are very well aware of the fact that methods may or may not consume any arguments. Let us discuss the methods which consume argument or have a predefined argument list. This argument list may contain any number of arguments but with a compulsion that you will have to pass the same number of arguments with the method as specified in the argument list of the method. But this decreases the versatility of the code, what if you have created a method which adds three numbers but the requirement of the time is to add two numbers only. Your function will fail in this case. One way is to overload the method but the thing is how many times you can overload the method because there may be n number of possibilities and that will eventually make your code redundant. Ruby has a good concept of splat arguments which allows you to pass any number of arguments in the method. Splat arguments are of two types which are discussed in the rest of the article.

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

1)单个Splat参数 (1) Single Splat Arguments)

Single splat argument is implemented with the help of * operator. You can pass Arrays with the help of them. Refer the syntax given below,

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

    def method_name( *args)
        ...
    end

The following example will help you to understand its implementation,

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

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)}"

Output

输出量

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

You can observe in the above code that we have created a method that is multiplying all the arguments which are passed in it. We are taking help from a splat operator which is allowing us to pass as many arguments we want. We have passed the different number of arguments in each method call. If this is not the case then we might have to define the different methods for the different number of arguments.

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

2)Double splat参数 (2) Double splat arguments)

The concept of double splat argument was introduced in Ruby 2.0. The implementation is pretty similar to a single splat argument but an add-on feature that will also work for hashes. It is implemented with the help of ** operator. Following is the syntax that will tell you how can we use double splat arguments.

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

    def show( **args)
        ...
    end

Now, let us go through its example for understanding it better.

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

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

Output

输出量

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"

In the above code, you can observe that we have created two hashes data1 and data2. We have created a method fruits and we are passing these hashes with the different number of entries into the method.

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

翻译自: https://www.includehelp.com/ruby/splat-arguments.aspx

splat net

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值