2010-11-13 6 views
1

У меня есть следующий фрагмент кода:Рубин управления некорректный массив

nonce = data.scan(/nonce="(.*)"/) 

data является строкой, то искомая часть строки assigend к Нонс переменной, которая автоматически становится массивом. Теперь, если я

puts nonce[0] 

я получу значение распечатана правильно:

51d8852d 

, но если использовать:

puts "final string #{md1}:#{nonce[0]}:#{md2}" 

выход будет:

df49f55acfd9d21837fd840644f251b4:["51d8852d"]:3b7718806908d2a4456086be7daba94ccd36ea19fd2bfa80ae41fa8be23433b7 

но не должно быть никакого брелка ets или duoble, я должен получить только значение массива. Это должно быть что-то вроде этого:

df49f55acfd9d21837fd840644f251b4:51d8852d:3b7718806908d2a4456086be7daba94ccd36ea19fd2bfa80ae41fa8be23433b7 

Не могли бы вы предложить мне, как решить эту проблему? Благодаря

Dawid

ответ

3

При использовании сканирования с захватом группой, результатом является массивом массивов, так что вы хотите использовать nonce[0][0]. Вы запутались, потому что ваш первый пример подает nonce[0], который представляет собой массив, до puts, который обрабатывает массивы, распечатывая каждый элемент. Если вы делаете puts nonce[0].class, вы увидите ...

+0

Спасибо, вы были правы, что работает :) – Dawid

+0

Или используйте nonce.flatten [0]. Конечный результат тот же, поэтому он действительно зависит от того, что выглядит лучше. –