这是我想做的伪代码:
if @current_user is defined then puts @current_user.name
然后使用运算符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)
您是否真的需要知道变量是否已定义或者是否足以知道它是否包含有效User
对象?
实例变量永远不会引发 a NameError
,即使它们没有被定义。他们只是评估为nil
,所以你可以检查一下:
puts @current_user.name unless @current_user.nil?
由于你的问题被标记为ruby-on-rails,我假设你已经ActiveSupport
加载了,所以你也可以使用Object#try
扩展方法:
puts @current_user.try(:name)
puts @current_user.name if instance_variable_defined?(:@current_user)