Yukihiro Matsumoto本人有https://ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/syntax.html,但鉴于我找不到提及&.
(例如a&.b
)或&:
(例如m(&:f)
}),它似乎没有更新。我记得很久以前有一个人试图根据MRI的单元测试来记录它,但由于缺乏开发人员的协作而放弃并放弃了项目。
目前,似乎学习的唯一方法是在StackOverflow或某个开源ruby项目上偶然发现新语法。
答案 0 :(得分:4)
Ruby语法的规范文档与doc/syntax
目录中的语言源代码一起维护。您可以在GitHub上阅读,例如在ruby-doc.org。
在那里,您会找到&.
运营商的the description:
您可以使用
&.
指定接收者,然后当接收者为my_method
时,不会调用nil
,结果为nil
。在这种情况下,my_method
的参数不会被评估。
以及the logic将Proc对象(或更准确地说:一个可以转换为Proc的对象)转换为块:
您可以使用
&
运算符将proc或lambda转换为块参数:argument = proc { |a| puts "#{a.inspect} was yielded" } my_method(&argument)
这里需要注意的是,符号会响应to_proc
,它允许符号像proc一样运行(因此当用于调用带有例如{的方法时,可以将其转换为proc并随后转换为块。 {1}}。
一般而言,要了解Ruby的语法和编程方法,您可以从几本书中的一本开始,例如: Programming Ruby 1.9 and 2.0。一般来说,从开始到出版,书籍往往需要一些时间(通常是几年),因此往往不会涵盖最新的语言添加。但是,它们可以为您提供有关语言及其核心概念的良好概述。
在较新版本的Ruby中有一些新增功能可以使一些事情变得更容易,例如Ruby 2.3中添加的my_method(&:foo)
运算符或默认冻结字符串等。虽然这些新增功能很有用,但是当您开始使用Ruby进行编程时,通常会偶然发现它们。在这里,遵循release news可能会很有用,其中简要描述了新功能和显着变化。