【问题标题】:Is there a definitive reference document for Ruby syntax? [closed]是否有 Ruby 语法的权威参考文档? [关闭]
【发布时间】:2023-03-24 04:01:01
【问题描述】:

我正在寻找有关 Ruby 语法的权威文档。我知道核心 API 和标准库的权威文档,但是语法本身呢?例如,这样的文档应该涵盖:保留字、字符串文字语法、变量/类/模块的命名规则、所有条件语句及其排列等等。

我知道有很多书籍和教程,是的,但每一本本质上都是一个教程,每个都有不同的深度和重点。出于简洁和叙述流畅的需要,它们都将省略作者认为无关紧要的语言的某些细节。

例如,您是否知道可以使用没有初始 case 值的 case 语句,然后它会执行第一个 true when 子句?任何给定的 Ruby 书籍或教程可能会或可能不会涵盖案例语法中鲜为人知的特定功能。在“Programming Ruby”中关于 case 语句的部分没有讨论。但这只是一个小例子。

到目前为止,我发现的最好的文档是 ruby​​spec 项目,它似乎是为该语言编写一个完整的测试套件的尝试。这还不错,但从实际的角度来看,作为我自己项目的开发人员,使用它有点困难。

我只是遗漏了什么,还是真的没有定义整个 Ruby 语法的权威可读文档?

【问题讨论】:

    标签: ruby syntax documentation


    【解决方案1】:

    唯一可以合理描述为“权威”的文档是YARV源码树中parse.y的源码。

    ISO Draft Specification 包含一个包含语法摘要的 39 页附录。但是请注意,ISO Ruby 是 Ruby 1.8 和 1.9 交集的最小子集。 IOW:它没有描述仅在 1.8 或仅在 1.9 中的任何内容(因此,没有描述 1.9 中的语法添加,如 stabby proc 和符号哈希),也没有描述 everything那个路口。 ISO Ruby 在这方面有点像 ISO HTML。

    RubySpec 项目包含 Ruby 语言的可执行规范。但是,它不包含明确的语法规范。语法的唯一规范是示例本身中的隐式。此外,因为 RubySpec 是一个基于示例的规范,它只能向您展示有效 Ruby 代码的具体示例,但不能像语法规范那样告诉您所有可能的有效 Ruby 程序。而且,由于 RubySpec 本身就是可执行的 Ruby 代码,它只能向您显示有效的示例,而不是无效的示例。

    最后一点可以被认为是权威的是 David Flanagan 和 Yukihiro "matz" Matsumoto 的书 The Ruby Programming Language

    但是,请注意,“整个 Ruby 语法”是一项相当艰巨的任务,因为 Ruby 的语法异常复杂且有大量奇怪的极端情况。

    【讨论】:

    • @Jörg W Mittag:感谢您对 ISO 草案的澄清。我不得不说,关于 1.8 和 1.9 的共同子集的业务从草案的网站(或它所获得的媒体)上根本不清楚。在起草指南部分,该网站的作者(两次)表示他们使用 1.8.7 作为主要参考。像大多数人一样,我认为这意味着 1.8.7 是他们要指定的目标。
    • @Telemachus:它隐藏在起草指南中:其次,我们打算将现有的实现,如 Ruby 1.8.7、Ruby 1.8.6、Ruby 1.9、JRuby、Rubinius , IronRuby 无需修改即可符合规范。有一些特性在一些实现中没有实现或者在实现之间是不同的。 这些特性被排除在规范之外,或者被描述为“实现定义”或“依赖于实现”。
    【解决方案2】:

    有一个 Ruby 标准的草案正在编写中。你可以在这里得到它:http://ruby-std.netlab.jp/

    您关于caseRuby 编程 的示例选择不当。当 Programming Ruby 引入 case(第一版第 98 页;第二版第 141 页)时,Thomas 说,

    Ruby case 表达式是一头强大的野兽:多路 if 在类固醇上。为了让它更强大,它有两种口味。

    然后他简要解释了用例的两种方式(在初始 case 之后有一个明确的目标,而没有)。他实际上是从你说他没有提到的风格开始的。

    不过,您的更大观点并非不合理。有一个标准可能会有所帮助。

    【讨论】:

    • 请注意,ISO 规范非常小。它仅涵盖 1.8 和 1.9 的公共子集(例如,没有 stabby proc 和符号哈希)。而且它甚至没有涵盖整个公共子集,只是很小的一部分。
    • 关于 case 语句和 Programming Ruby 书,我一直在查看 ruby​​-doc.org 托管的版本,它被标记为 ruby​​-doc 主页的第一版。该特定版本没有碰巧提到案例陈述的“两种风格”(ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#S5)无论如何,您认为案例陈述是一个坏例子是对的!这本书的不同版本比比皆是,最终这只会增加对标准参考的需求。
    【解决方案3】:

    【讨论】:

    • 嗯,是的,从实际的角度来看,我发现该文档也很有用,但我无法找到任何一种权威的父资源,使其具有作为参考文档的可信度。所以我不确定我可以信任多少,或者自 1.4 以来该语言发生了多少变化。
    【解决方案4】:

    正如上述答案所建议的,正在努力在http://ruby-std.netlab.jp 上编写“规范”。

    你必须小心那个“规范”。这不是由语言设计者完成的,他们基本上是在记录他们所看到的,而不是相反。它基于 1.8.7,因此可能存在 1.9 中未涵盖的功能。

    我无法想象自己会记住 300 页文档的语法。要“在桌子上”,this cheatsheet 会描述您想要的:精简语法、保留字等。This is an alternative from dzone

    【讨论】:

    • 我的印象是该规范已得到 Ruby 开发人员的正式认可(Matz 等人)。那是错的吗?而且,是的,1.8.7 的选择是有争议的,但这是一个开始。有关更多信息和链接,请参见此处:rubyinside.com/ruby-iso-spec-draft-2900.html
    • 该规范由 Shugo Maeda(matz 的得力助手)、Shyouhei Urabe(Ruby 1.8.7 和 MRI 1.8.7 的维护者)和 Yutaka Hara(Ruby、YARV 和 MRI 开发人员)领导与matz本人合作。它不是基于 1.8.7,而是基于 1.8.7 和 1.9.2 的公共子集。您将规范与流程混淆(具有讽刺意味的是,这正是 指责规范作者的原因):他们从 1.8.7 开始并删除了 1.9.2 中没有的所有内容.他们本可以反过来做,结果会完全一样。
    • 约尔格,感谢您提供的信息。
    • 我刚刚重新阅读了我的评论并意识到它可能过于苛刻。我为此道歉。正如你可能从我的名字中猜到的那样,英语不是我的第一语言。我想我对有关 ISO Ruby 流程的错误信息感到相当沮丧。当然,大多数错误信息是由于实际上没有那么多 正确 信息这一事实造成的,因为大多数过程都以无法准确描述为“透明”的方式进行”。哦,讨论大多用日语进行这一事实并没有多大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2010-09-18
    • 2011-04-10
    • 2010-10-29
    相关资源
    最近更新 更多