除非定义?在我的代码中不起作用
unless defined? is not working in my code
我期待以下片段:
var2 = "Not Empty" unless defined? var2
到return"Not Empty",但我没有得到。是否了解为什么会发生这种情况?
如果您想要确定变量是否为 nil
,请尝试 var2 = "Not Empty" if var2.nil?
。 defined?
很少使用并且用于不同的目的(见下文)。
irb(main):009:0> var2 = nil
=> nil
irb(main):010:0> var2 = "Not Empty" if var2.nil?
=> "Not Empty"
irb(main):011:0> var2
=> "Not Empty"
irb(main):012:0> var2 = 'foo'
=> "foo"
irb(main):013:0> var2 = "Not Empty" if var2.nil?
=> nil
irb(main):014:0> var2
=> "foo"
如果您不确定变量是否已经声明,您可以使用以下语法:
if defined?(var2).nil?
var2 = "Not Empty"
end
(正如@Jordan 所指出的那样,出于某种奇怪的原因,它不能在一行中全部工作,但这行得通。)
但是,惯用的 Ruby 方法通常称为 "nil guard",如下所示:
var2 ||= "Not Empty"
defined?
方法将 return:
无 => 无法识别表情
上面片段中的问题是局部变量的范围。 Its end on the line where you using it
。要了解有关局部变量的更多信息,请查看:local_variable
pry(main)> p "local_var is not initialized" unless defined? local_var
=> "loca_var is not initialized"
但是如果你这样做:
pry(main)> local_var = "initialized" unless defined? local_var
=> nil
local_var 仍然是 nil
因为它的作用域在该行之后结束,所以分配的任何内容都被浪费了。
解决方案:如果你想要这种行为,我会建议你使用这个:
local_var ||= "initialized"
我期待以下片段:
var2 = "Not Empty" unless defined? var2
到return"Not Empty",但我没有得到。是否了解为什么会发生这种情况?
如果您想要确定变量是否为 nil
,请尝试 var2 = "Not Empty" if var2.nil?
。 defined?
很少使用并且用于不同的目的(见下文)。
irb(main):009:0> var2 = nil
=> nil
irb(main):010:0> var2 = "Not Empty" if var2.nil?
=> "Not Empty"
irb(main):011:0> var2
=> "Not Empty"
irb(main):012:0> var2 = 'foo'
=> "foo"
irb(main):013:0> var2 = "Not Empty" if var2.nil?
=> nil
irb(main):014:0> var2
=> "foo"
如果您不确定变量是否已经声明,您可以使用以下语法:
if defined?(var2).nil?
var2 = "Not Empty"
end
(正如@Jordan 所指出的那样,出于某种奇怪的原因,它不能在一行中全部工作,但这行得通。)
但是,惯用的 Ruby 方法通常称为 "nil guard",如下所示:
var2 ||= "Not Empty"
defined?
方法将 return:
无 => 无法识别表情
上面片段中的问题是局部变量的范围。 Its end on the line where you using it
。要了解有关局部变量的更多信息,请查看:local_variable
pry(main)> p "local_var is not initialized" unless defined? local_var
=> "loca_var is not initialized"
但是如果你这样做:
pry(main)> local_var = "initialized" unless defined? local_var
=> nil
local_var 仍然是 nil
因为它的作用域在该行之后结束,所以分配的任何内容都被浪费了。
解决方案:如果你想要这种行为,我会建议你使用这个:
local_var ||= "initialized"