Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby数组删除vs删除(bang)_Ruby_Arrays - Fatal编程技术网

Ruby数组删除vs删除(bang)

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| @

我以为Array#delete删除了数组中某个对象的所有副本,但在我编写的这个程序中发生了一些奇怪的事情(我无法解释)。只有当我在Delete函数的末尾包含一个bang时,Delete才起作用,尽管它似乎没有定义

以下是所讨论的功能:

  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版本)。