Я не понимаю этот код:

a = [ "a!", "b!", "c!", "d!" ]
a.collect!.with_index {|x, i| x[0...i]}
a #=> ["", "b", "c!", "d!"]

Что делает x[0...i] в строке collect? Я вижу результат, но не понимаю, как он это делает / получает.

1
John Cowan 11 Мар 2018 в 17:50

1 ответ

Лучший ответ

Согласно документам:

Диапазоны, построенные с использованием .., выполняются от начала до конца включительно. Те, которые созданы с использованием ... исключают конечное значение ..

Итак, a..b похоже на a <= x <= b, тогда как a...b похоже на a <= x < b. то есть:

>> "a!"[0...0]
=> ""
>> "a!"[0...1]
=> "a"
>> "a!"[0...2]
=> "a!"

В вашем a.collect!.with_index значения x и i будут:

  • "а!" - 0 => "a!"[0...0] => ""
  • "б!" - 1 => "b!"[0...1] => "b"
  • "c!" - 2 => "c!"[0...2] => "c!"
  • и так далее ...
5
fongfan999 11 Мар 2018 в 15:11