У меня есть строка кода сравнения в рубина, в котором я получаю некоторые странные выходпрограмма рубин для сравнения строк
def matchval_not_pos(str1, str2)
a1, a2 = str1.chars, str2.chars
return 0 if a1 == a2
[a1.size, a2.size].min.times do |i|
if a1[i] == a2[i]
a1.delete_at(i)
a2.delete_at(i)
end
end
a1.reduce(0) do |t,c|
i = a2.index(c)
if i
inc = 1
a2.delete_at(i)
else
inc = 0
end
t + inc
end
end
Я получаю выход на Поддеть консоли
=> :matchval_not_pos
[12] pry(main)> matchval_not_pos("abc","abc")
=> 0
[13] pry(main)> matchval_not_pos("abcd","abc")
=> 1
[14] pry(main)> matchval_not_pos("abcde","abc")
=> 1
[15] pry(main)> matchval_not_pos("abcdef","abc")
=> 1
[16] pry(main)> matchval_not_pos("abcdefgh","abc")
=> 1
[17] pry(main)> matchval_not_pos("abcdefgh","abcdefghi")
=> 4
[18] pry(main)> matchval_not_pos("abcdefgh","abcdefghijklmn")
=> 4
[19] pry(main)> matchval_not_pos("abcdefghijklmn","abcdefghijklmn")
=> 0
[20] pry(main)> matchval_not_pos("abcdefghijklmnop","abcdefghijklmn")
=> 7
[21] pry(main)> matchval_not_pos("abcdefghijklmnop","abcdefghijklmnop")
=> 0
[22] pry(main)> matchval_not_pos("abcdefghijklmnop","abcdefghijklmnopqw")
=> 8
[23] pry(main)> matchval_not_pos("abcdefghijklmnop","abcdefghijklmnop")
=> 0
Я не могу разобраться это почему я получаю этот выход. Может кто-то, пожалуйста, помогите мне.
Какой выход _were_ вы ожидаете? –
Если matchval_not_pos ("abc", "abc") => 0 & pry (main)> matchval_not_pos ("abcde", "abc") => 2 Если вы отметите, что три строки charecters правильно соответствуют, но если i увеличенная строка charector в str1 like ("abcdefg", "abcd"), это дает мне неправильный вывод – user4537116
Одна вещь, которую вы можете сделать, это разбить 'matchval_not_pos' на более мелкие методы и написать единичные тесты для каждого метода. Возможно, это поможет вам быстрее отладить это, плюс вы сможете протестировать все случаи краев. – aceofbassgreg