Ruby数组删除vs删除(bang)
我以为Array#delete删除了数组中某个对象的所有副本,但在我编写的这个程序中发生了一些奇怪的事情(我无法解释)。只有当我在Delete函数的末尾包含一个bang时,Delete才起作用,尽管它似乎没有定义 以下是所讨论的功能:Ruby数组删除vs删除(bang),ruby,arrays,Ruby,Arrays,我以为Array#delete删除了数组中某个对象的所有副本,但在我编写的这个程序中发生了一些奇怪的事情(我无法解释)。只有当我在Delete函数的末尾包含一个bang时,Delete才起作用,尽管它似乎没有定义 以下是所讨论的功能: def propagate @puzzle.each do |sqr, values| if values.length == 1 @neighbors[sqr].each do |neighbor| @
def propagate
@puzzle.each do |sqr, values|
if values.length == 1
@neighbors[sqr].each do |neighbor|
@puzzle[neighbor].delete!(values)
end
end
end
end
@拼图是以字符串作为键和值的散列,格式如下:@puzzle[“A1”]=“123456789”
@邻居是一个哈希,字符串作为键,字符串数组作为值:
@neighbors["A1"] = ["A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "B2", "B3", "C2", "C3"]
当我像这样运行代码时:@puzzle[neighbor].delete(values)
puzzle中的值不受删除的影响。但是当我包括了!它起作用了
为什么会这样?这是一个常见的习语。Bang方法就地修改对象,“normal”方法返回修改后的副本
删除代码>您正在执行的方法调用针对的是字符串,而不是数组。而且String
确实有方法delete代码>:这是一个常见的习语。Bang方法就地修改对象,“normal”方法返回修改后的副本
删除代码>您正在执行的方法调用针对的是字符串,而不是数组。而且String
确实有方法delete代码>:事情发生在IRB中,我尝试复制场景,但解释器甚至无法识别删除代码>。另外,常规的delete按照irb中的预期对数组进行了变异;a、 删除!(“1”)
但我得到了命名错误。。。给出了什么?问题是在IRB中,我试图复制场景,而解释器甚至无法识别delete代码>。另外,常规的delete按照irb中的预期对数组进行了变异;a、 删除!(“1”)
但我得到了命名错误。。。给出了什么?但是,Array#delete
确实在适当的位置修改了数组(没有bang版本)。但是,Array#delete
确实在适当的位置修改了数组(没有bang版本)。