0

我在本地机器上使用 ruby​​ 2.6.5。我也在 heroku 机器上使用相同的 ruby​​ 版本。

但是我在使用heroku时遇到了奇怪的错误。

如果我定义了一个方法,如:

def current_admin
  @current_admin ||= 'yana'
end

它在我的机器上完美运行,在 heroku 上它会引发 NameError:

NameError (`@` is not allowed as an instance variable name)

但是当我这样做时:

def current_admin
  return @current_admin if defined?(@current_admin)
  @current_admin = 'yana'
end

它适用于两台机器。

导致第一个语法在heroku上失败的区别到底是什么?

* 更新 *

我为使其在heroku上工作而制作的差异。

   def current_account
-    @current_account ||= AccountSession.find
+    return @current_account if defined? @current_account
+
+    @current_account = AccountSession.find
   end
4

1 回答 1

3

我对 Heroku 故障一无所知,但这里是关于究竟有什么区别的答案。

@current_admin ||= 42

上面的行与@current_admin = @current_admin || 42. 也就是说,该值将重置为42when @current_adminis falsey,也就是 _eitherfalsenil

@defined当且仅此实例变量先前未在当前范围内声明时,将重置该值。Evennil会保持原样,就好像它之前明确设置过一样。

defined? @current_admin
#⇒ nil
@current_admin = nil
defined? @current_admin
#⇒ "instance-variable"
于 2019-11-17T19:12:27.797 回答