3
我有一个List
类用Node
类实现。我#remove!
方法如下:Ruby链表实现#remove! do block ineffectual
def remove!(list_item)
find list_item do |i|
if i == nil
return
else
i.pointer = i.pointer.pointer
end
end
end
#find
确实如我所料,回到以前含有一个基准搜索的节点。所以我期望这样做可以在搜索到的项目之后设置上一个项目的指针,该项目应该从列表中删除当前项目。
我认为这与块的作用域有关,而且传递给块的i
不是直接引用它应该在块中的对象,因此不能覆盖它的指针值。我怎么能强制这个块改变这个值,而没有显式地声明这个值(这会破坏这个块的用途)。
#find
方法和'#traverse'方法的行为与预期的一样,所以我认为这个块有是责任。我试图避免两次进行相同的函数调用,或者声明一个抛出变量,因为我对函数式编程感兴趣,并且想尝试一下。每个请求
编辑:
在github
的full code的#find
方法
def find(item_to_find, current_item = @sentinel.pointer, previous_item = @sentinel)
if current_item == @sentinel then puts "not found"; return nil end
if current_item.datum == item_to_find
return previous_item
else
find item_to_find, current_item.pointer, current_item
end
end
请问你'find'方法找到一个节点,并在那里/如何存储这些节点/访问?正如你怀疑的那样,一个新的对象'i'正在创建并传递给该块。如果不知道数据结构的更多内部信息,很难详细说明解决方案。 – pje