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
为什么结果是 '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