-3

正如 liron 在这个问题中所问的那样,-d 子文件中的语法错误require由该方法挽救,require并作为require. 为什么会这样设计?将错误归因于require读取的子文件中的语法错误而不是语法错误有什么好处?我的理解是,这个特性是在 gem 系统成为 Ruby 的标准部分时引入的。可能与此有关。

4

1 回答 1

1

有问题的堆栈跟踪的相关部分:

/home/***/.rvm/.../rubygems/core_ext/kernel_require.rb:45:in `require':
 .../food_finder/lib/restaurant.rb:84: 
syntax error, unexpected end-of-input, expecting keyword_end (SyntaxError)**

确实说明了错误在哪里。

语法错误包含在一个错误中, require因为这是引发错误的地方:文件正在由require 方法处理。如果所需文件中有错误,它会被require.

它被救出require(并可能重新提出),因此require可以在与找不到文件和 gem 失败有关的各种情况下尝试原始方法。

您是否建议require将这只是另一种方法,以某种方式进行特殊处理,以便错误处理以完全不同的方式运行?这样做的投资回报率值得吗?

不颠覆 Ruby 工作方式的“好处”是它保持统一。当明确说明错误时,我认为这样做的投资回报率很小。一些混淆可能来自于不去探索,这require只是另一种方法——但它是,因此,它遵循与语言其他部分相同的规则。

于 2013-05-18T13:32:04.173 回答