3

这是我想做的伪代码:

if @current_user is defined then puts @current_user.name
4

3 回答 3

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)
于 2013-10-18T12:48:20.283 回答
3

您是否真的需要知道变量是否已定义或者是否足以知道它是否包含有效User对象?

实例变量永远不会引发 a NameError,即使它们没有被定义。他们只是评估为nil,所以你可以检查一下:

puts @current_user.name unless @current_user.nil?

由于你的问题被标记为,我假设你已经ActiveSupport加载了,所以你也可以使用Object#try扩展方法:

puts @current_user.try(:name)
于 2013-10-18T13:02:06.887 回答
2
puts @current_user.name if instance_variable_defined?(:@current_user)
于 2013-10-18T12:51:32.677 回答