gpt4 book ai didi

ruby - proc函数相对于方法有什么优势

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

我在 Project Euler 上解决了一些问题我提到我总是在 proc 函数中包装短方法。我问自己“为什么?”。答案是“我不知道。可能是因为它很短?”。

那么 proc 函数相对于普通方法的优势是什么,除了它们很短:)

# Proc
is_prime = proc{|number| !((number%2 == 0) || (3..Math.sqrt(number).to_i).step(2).any?{|n| (number%n).zero?})}

# Ordinary method
def is_prime(number)
!((number%2 == 0) || (3..Math.sqrt(number).to_i).step(2).any?{|n| (number%n).zero?})
end

最佳答案

能够传递它们并将它们存储在数据结构中是我立即想到的事情。我在一个小型命令行解析器中使用后一种情况的时间不太长:使用正则表达式解析用户输入并调用 commands[command] 并将解析后的字符串的其余部分作为参数。当然,您可以对方法和 send 做同样的事情,但恕我直言,命令散列更好。我有时使用的另一件事——尽管它在 Ruby 中并不常见——是 curry procs,你不能用方法真正做到这一点:

>> multiplier = proc { |x, y| x * y }
=> #<Proc:0x00000100a158f0@(irb):1>
>> times_two = multiplier.curry[2]
=> #<Proc:0x00000100a089c0>
>> times_two[5]
=> 10

编辑:这是另一个示例(经过简化,没有错误处理):

 commands = { :double => proc { |x| x * 2 }, :half => proc { |x| x / 2 } }
run_command = proc do
command, arg = STDIN.gets.split
commands[command.intern][arg.to_i]
end
run_command.call
half 10
# => 5
run_command[]
double 5
# => 10

关于ruby - proc函数相对于方法有什么优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7106509/

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