openlang

ruby delete 的行为不符合预期?

我修改一个整数数组时,在 ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin13] 下得到了意外的结果。

values = [
  2, 134, 163, 215, 108
]
=> [2, 134, 163, 215, 108]
target = 108
=> 108
values.delete(target)
=> 108

稍微改变写法,结果还是一样。

是我写错了,还是别的命令覆盖了这个操作,甚至是有什么东西损坏了?我不确定,该怎么检查呢?

从英语翻译查看原文

后续讨论 2

顺着彼此的依据读下去
  1. 固定链接

    你原本觉得运行这段代码会看到什么结果?你贴出的例子看起来正按预期工作。

    运行例子后马上查看 values 的内容,最后一个元素应该已经没有了。

    Ruby 对 delete() 的定义可能有点出人意料。你可能会觉得它会保留原数组,返回修改后的副本,从而能写出这样的调用链。

    values.delete(target).delete(163)

    然后另有一个带感叹号的形式,用来修改数组本身。

    values.delete!(target)

    但这个方法并不是这样工作的。调用普通的 delete() 就会直接修改接收调用的数组。

    从英语翻译查看原文

同一个问题的其他角度

  1. 在 Godot 3.3 的 GDScript 中怎样随机选择枚举项而不用逐项列出?

    这是我在 GDScript 中使用的枚举声明。 我想随机选择一个枚举变体,而不用列出所有可能的变体。这样以后增加变体时,就不必修改负责随机选择的代码。 我尝试过下面这种方法。 还有这一种。 两种都失败了。一个返回 Null,另一个报告 "Invali…

    回复 2最近活动 gdscript
  2. Nim 求余语法

    Nim 中怎样表示求余运算? cell % 7 == 0 会给出 undeclared identifier: '%' 这个错误 Google 搜索和查看 SO 都没找到答案。

    回复 2最近活动 nim
  3. 从 APL 函数返回结果

    怎样才能让函数在执行结束后返回一个值? 例如我有这样的代码。 ROUTINE N ? N ⍴ 12 //它会生成 N 个从 1 到 12 的随机值 (N 是函数的参数)。 我只是想知道怎样拿到函数的结果,然后比如把这个结果传给另一个函数。 谢谢大家的…

    回复 2最近活动 apl