gpt4 book ai didi

ruby-on-rails - &Proc.new 在方法中的作用是什么?

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

我在 rails 源代码中找到了 &Proc.new 的用法:

# rails/railties/lib/rails/engine.rb
def routes
@routes ||= ActionDispatch::Routing::RouteSet.new
@routes.append(&Proc.new) if block_given?
@routes
end

我不明白表达式 &Proc.new 是如何工作的。

我写了类似的代码但失败了:

def method_name
&Proc.new if block_given?
end
proc = method_name{ puts 'Hello world!' }
proc.call

我收到语法错误:

syntax error, unexpected &
&Proc.new if block_given?
  • 表达式 &Proc.new 在方法中的作用是什么?

最佳答案

首先你应该了解什么是blocks和Procs。基本上它们是 ruby​​ 提供闭包的方式。 Here是一个很好的链接。

ruby 中的一元 & 运算符有 3 种用途(它们都与 block 和 Procs 相关):

  • 如果应用于方法定义中的参数,则隐式 block 参数将使用参数名称存储为 Proc。

  • 如果在方法调用中应用于 Proc,则 Proc 中包含的 block 将作为隐式 block 参数传递。它保留 Proc 是否为 lambda。方法始终是 lambda。

  • 如果在方法调用中应用于其他对象,则调用方法 #to_proc 并像第二种情况一样传递生成的 Proc。

The & Operator in Ruby详细解释。

关于ruby-on-rails - &Proc.new 在方法中的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21481620/

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