以下是我想要做的伪代码:
if @current_user is defined then puts @current_user.name
答案 0 :(得分:4)
然后使用运算符defined?
。
x = 10
defined? x # => "local-variable"
defined? y # => nil
@x = 10
defined? @x # => "instance-variable"
!!defined? x # => true
!!defined? y # => false
编写如下代码:
puts @current_user.name if !!defined?(@current_user)
答案 1 :(得分:2)
puts @current_user.name if instance_variable_defined?(:@current_user)
答案 2 :(得分:2)
你确实需要知道变量是否已定义,或者是否足以知道它是否包含有效的User
对象?
实例变量永远不会引发NameError
,即使它们未定义。他们只评估nil
,所以你可以检查一下:
puts @current_user.name unless @current_user.nil?
由于您的问题被标记为ruby-on-rails,我会假设您已加载ActiveSupport
,因此您也可以使用Object#try
扩展方法:
puts @current_user.try(:name)