部分变量会覆盖辅助方法吗?

Do partial variables override helper methods?

我有一些调用 current_language 的辅助方法,有时我会在 local_assigns 中发送 current_language

所以我想通过 local_assignscurrent_language 分配我的部分变量,以防它被发送。

但是我发现了一些奇怪的东西,在下面的代码中:

<%
  binding.pry
  x = 4

  current_language = local_assigns[:current_language] || current_language
%>

调试时第 3 行 current_language 等于 nil 甚至在覆盖之前。

我希望它在被覆盖之前仍然等于辅助方法。

所以这是怎么回事?

这是语言的有据可查的功能。变量有点提升。使用此代码明确告诉解析器变量在哪里以及方法调用在哪里:

#                                                                      ⇓⇓
current_language = local_assigns[:current_language] || current_language()