Ruby 一行中的块变量未定义错误,但适用于 do..end 块

Ruby Block Variable not defined error in one line, but works on do..end block

我不知道如何解释更多,我愿意接受建议。

这是一个例子:

User.last.orders.detect { |user_order| user_order.query.id == 107 }

这行不通;

NameError: undefined local variable or method ` user_order' for main:Object
from (pry):51:in `block in <main>'

但这行得通:

User.last.orders.detect do |user_order|
  user_order.query.id == 107
end

这只是一个简单的例子。我真的不明白为什么会这样。谢谢!

问题是您在管道和 user_order 之间有一个额外的 "non-breaking space",这就是消息显示的原因:

NameError: undefined local variable or method ` user_order' for main:Object

您的实际变量是“user_order”而不是"user_order"。

这通常发生在同时按下 altspace 时(在 OSX 上),在 Ruby.

中为 "inline" 块打开花括号时很常见