Ruby"实例变量未初始化"警告

Ste*_* B. 11 ruby

在ruby中编写一些"学习语言"代码时,作为linkList实现的一部分,我遇到了这个警告:

在"添加"方法中,如果头部尚不存在,则创建头部,即

  def add(value)
   new_node=LinkedListNode.new(value)
   if !@head
     @head=new_node
   else
     self.find {|node| node.next ==nil }.next=new_node
   end
  end
Run Code Online (Sandbox Code Playgroud)

然后我收到警告

.../linked_list.rb:13: warning: instance variable @head not initialized
Run Code Online (Sandbox Code Playgroud)

我如何摆脱这个警告?这样做的惯用方法是什么?

Log*_*ldo 20

除了Matchu的建议,您还可以使用懒惰地defined?初始化@head,而不会引发警告:

if defined? @head
  ...
else
  @head = new_node
end
Run Code Online (Sandbox Code Playgroud)

这种事情的正常习惯是

@head ||= new_node
Run Code Online (Sandbox Code Playgroud)

这也不会引发警告,但在这种情况下,如果@head没有定义你似乎需要做一些事情,并且它不是幂等的,因此||=在这种情况下不能很好地工作.||=还有缺点是无法区分假,零或未设置.初始化为nil初始化可能是最佳选择.


Mat*_*chu 10

你可以声明@headnilinitialize法,换一个.