作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
此代码为 my initial stab在 Exercism.io 上的汉明距离问题上,但是当字符串 a
长于字符串 b
时它失败了,我试图理解为什么。
def self.compute(a, b)
a.split('').reject.with_index { |c, i| c == b[i] }.size
end
我通过修剪第一个字符串解决了这个问题...
def self.compute(a, b)
a[0...b.size].split('').reject.with_index { |c, i| c == b[i] }.size
end
...但我不明白为什么 reject
包含额外的字符。当我检查比较结果时,它们似乎是错误的,正如我所预料的那样,但仍包含在结果中。
谁能告诉我为什么?
最佳答案
I don't understand why reject is including the extra characters. When I check the comparisons, they seem to be coming up false
正确。当您拒绝时,false
表示“接受”——与拒绝相反。
问题仅仅是您没有理解“拒绝”的含义。当您遇到这样的问题时,调试。在这种情况下,这样做的方法是消除多余的 Material 并专注于让您感到困惑的事情。删除 size
调用,只查看 reject
调用的结果:
def compute(a, b)
a.split('').reject.with_index { |c, i| c == b[i] }
end
result = compute("hey", "ha")
puts result
输出是"e"
和"y"
。这是有道理的:
在第一次通过时,"h"
== "h"
并被拒绝。
在第二遍中,"e"
!= "a"
并被接受。
第三遍,"y"
没有可比性,无法成功;因此我们未能拒绝——所以“y”
被接受了。这就是你要问的。
关于ruby - 为什么拒绝不是拒绝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28219686/
我是一名优秀的程序员,十分优秀!