首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby数组delete与delete(bang)

Ruby数组delete与delete(bang)
EN

Stack Overflow用户
提问于 2013-03-29 20:13:52
回答 1查看 979关注 0票数 0

我以为Array#delete删除了数组中一个对象的所有副本,但是在我正在编写的这个程序中发生了一些奇怪的事情(对我来说很难理解)。只有当我在Delete函数的末尾加上一个bang时,delete才会起作用,即使这似乎没有定义。

下面是有问题的函数:

代码语言:javascript
复制
  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是一个以字符串作为键和值的散列,格式如下:@puzzle["A1"] = "123456789"

@neighbors是一个以字符串为键,以字符串数组为值的散列:

代码语言:javascript
复制
@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)

拼图中的值不受删除操作的影响。但是当我包含!它起作用了。

为什么会这样呢?

EN

回答 1

Stack Overflow用户

发布于 2013-03-29 20:22:32

这是一个常见的习语。Bang方法就地修改对象,“正常”方法返回修改后的副本。

您正在执行的delete!方法调用针对的是字符串,而不是数组。而且String确实有delete!方法:http://www.ruby-doc.org/core-1.9.3/String.html#method-i-delete-21

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15703018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档