gpt4 book ai didi

ruby-on-rails - *(星号)符号在函数参数附近有什么作用,以及如何在其他情况下使用它?

转载 作者:数据小太阳 更新时间:2023-10-29 06:35:03 25 4
gpt4 key购买 nike

我正在使用 Ruby on Rails 3,我想知道在函数参数附近出现 * 运算符意味着什么,并了解它在其他场景中的用法。

示例场景(此方法来自 Ruby on Rails 3 框架):

def find(*args)
return to_a.find { |*block_args| yield(*block_args) } if block_given?

options = args.extract_options!

if options.present?
apply_finder_options(options).find(*args)
else
case args.first
when :first, :last, :all
send(args.first)
else
find_with_ids(*args)
end
end
end

最佳答案

这是来自 ruby​​ 的 splat 运算符(因此不是特定于 rails 的)。它可以根据使用位置以两种方式应用:

  • 将一些参数“打包”到一个数组中
  • 将一个数组拆分成一个参数列表

在您的函数中,您会看到函数定义中使用了 splat 运算符。结果是该函数接受任意数量的参数。完整的参数列表将作为数组放入 args

def foo(*args)
args.each_with_index{ |arg, i| puts "#{i+1}. #{arg}" }
end

foo("a", "b", "c")
# 1. a <== this is the output
# 2. b
# 3. c

第二种变体是当您考虑以下方法时:

def bar(a, b, c)
a + b + c
end

它恰好需要三个参数。您现在可以像下面这样调用此方法

my_array = [1, 2, 3]
bar(*my_array)
# returns 6

在这种情况下应用于数组的 splat 将拆分它并将数组的每个元素作为单独的参数传递给方法。你甚至可以通过调用 foo 来做同样的事情:

foo(*my_array)
# 1. 1 <== this is the output
# 2. 2
# 3. 3

正如您在示例方法中看到的那样,这些规则确实以相同的方式应用于 block 参数。

关于ruby-on-rails - *(星号)符号在函数参数附近有什么作用,以及如何在其他情况下使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5253545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com