"@var||= 123"和"返回@var(如果定义?(@var);@var = 123"?



我在本地机器上使用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

我不知道Heroku故障,但下面是区别的答案。

@current_admin ||= 42

上面的行与@current_admin = @current_admin || 42完全等效。也就是说,当@current_adminfalsey,也就是falsenil时,该值将重置为42

如果且仅此实例变量以前未在当前作用域中声明,@defined将重置该值。即使nil也会保持原样,如果它之前被明确设置的话。

defined? @current_admin
#⇒ nil
@current_admin = nil
defined? @current_admin
#⇒ "instance-variable"

相关内容

  • 没有找到相关文章

最新更新