Прохождение диапазонов индексов - PullRequest
0 голосов
/ 26 апреля 2010

В настоящее время я пытаюсь выяснить, как передать диапазон индекса в виде строки, но до сих пор не было никакой удачи. Вот пример того, что я пытаюсь сделать:

pos = %w{1 2..4}
values = %{x cat}
test_string = "This is a test with a string."

test_string[pos[1]] = values[1]

Я знаю, что могу просто разбить его на разделение или что-то подобное, но мне бы очень хотелось узнать, как передать это значение напрямую. Я думал, что смогу сделать это с помощью eval, но пока мне не везет. Любая помощь будет принята с благодарностью, спасибо!

Ответы [ 3 ]

0 голосов
/ 26 апреля 2010

Проблема в том, что что-то в% w преобразуется в строку как есть. Попробуйте в консоли, и вы увидите это:

>> %w{1 2..4}
=> ["1", "2..4"]

Он не расширяет диапазон перед его преобразованием.

0 голосов
/ 26 апреля 2010

Что вы пытаетесь сделать здесь? Индексы, которые вы пытаетесь использовать, являются строками, а не целыми числами и, следовательно, недопустимы.
Если вы можете объяснить, куда вы планируете попасть, может быть, мы можем предложить альтернативный маршрут?

0 голосов
/ 26 апреля 2010

не уверен почему вы хотели бы сделать это таким образом, но вы можете сделать:

%Q{1 #{(2..4).to_a.join(' ')}}.split

Примечание: если вы пытаетесь манипулировать тестовой строкой, которую вы хотите pos[0].chr (массивы начинаются с 0 и .chr получит значение ASCII).

РЕДАКТИРОВАТЬ: должен быть лучший способ достичь того, что вы пытаетесь сделать, дать нам больше информации о том, что вам нужно. может быть достаточно что-то вроде следующего:

[1] + (2..4).to_a

Edit2: с информацией, которую вы дали, попробуйте следующее

pos  = [15..22, 165..172] #array of ranges
dates = %w{20100426 20100430}
pos.each_with_index {|range, i| 
   test_string[range] = dates[i]
}
...