ruby帮我追查结果

ruby help me trace the outcome

为什么结果是 'a' 应该完全跳过 if 语句(这是错误的?)。 ?由于在第一次迭代中没有 str[i-1] ,它应该会抛出错误,但事实并非如此?当我使用 ByeBug 跟踪步骤时,它确实抛出了一个错误……我不明白。

lib/test.arb:6:in longest_streak': undefined method status' for [nil, nil, nil, nil, "s"]:Array (NoMethodError) from lib/test.arb:19:in `'

def longest_streak(str)

    current = ''

    longest = ''

    (0...str.length).each do |i|
        if str[i] == str[i - 1]
            current += str[i]
        end
        if current >= longest
            longest = current
        end
    end
    longest
end

p longest_streak('a')           # => 'a'

在Ruby中,负数索引会向后遍历。所以 str[-1] 将从数组的末尾开始,这将是 a 因为这是数组中唯一的字符。

str[-1]str[0] 在这种情况下是同一件事,这就是为什么要评估 if 条件的原因,因为 i 只为 0 而 0 - 1 == -1.

您可以通过在条件

中添加检查来解决此问题
if !(i - 1).negative? && str[i] == str[i - 1]
  current += str[i]
end