gpt4 book ai didi

ruby - 使用 Proc.call 与 Proc.[] 是否存在 Ruby 优先级问题?

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

最近和一个 friend 讨论Ruby的Proc。您可以通过多种方式之一调用 Proc。一种方法是调用 Proc.call :

p = Proc.new { |x| "hello, #{x}" }
p.call "Bob"
=> "hello, Bob"

另一种是使用大括号,Proc.[] :

p ["Bob"]
=> "hello, Bob"

这里是否存在任何潜在的优先级问题,或者这两个语句是否可以完全互换?如果没有,您能否提供一个提供不同结果的上下文示例?

最佳答案

#call技术允许运算符优先级潜在地模糊意图:

p = Proc::new do |a1| Proc::new do |a2| "#{a1.inspect}:#{a2.inspect}" end end
p.call([1,2,3]).call [1]
=> => "[1, 2, 3]:[1]"
p.call [1,2,3][1]
=> #<Proc:0x7ffa08dc@(irb):1>
p.call([1,2,3])[1]
=> "[1, 2, 3]:1"
p[[1,2,3]][[1]]
=> "[1, 2, 3]:[1]"

[] syntax 使参数与方法的语法关联更加稳健,但您可以通过将参数放在 Proc#call 的括号内来达到相同的效果。 .

关于ruby - 使用 Proc.call 与 Proc.[] 是否存在 Ruby 优先级问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2318162/

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