Почему массив возвращает случайное логическое значение при перечислении full_name, а не в консоли ruby?IRB - PullRequest
0 голосов
/ 05 февраля 2019

Почему массив (внутри блока карты) возвращает только [истина, истина, ложь], если выполняется в консоли ruby ​​как: x = [(rand 2) == 1, (rand 5) == 3, (rand11) == 6] тогда x, x, x?

first = "stephanie"
last = "devenport"
middle = "Lbp"

full_name = "#{first} #{middle} #{last}"

puts "#{full_name}\s\s\s\s\s"
.rstrip.gsub(' ', '').split(//)
.map{ |char| [(rand 2)==1, (rand 5)==3, (rand 11)==6].any? ? "#{char + ['~', '%', '^', '#'].sample}" : "#{char.upcase + ['-', '_'].sample}" }.join.chop

запустить в терминальном возврате => S_t ~ e ~ p ~ h # A_n ~ i ^ E_L_b ~ Pd ~ e ^ v # E_n%р ~ о ~ RT

1 Ответ

0 голосов
/ 05 февраля 2019
x = [(rand 2)==1, (rand 5)==3, (rand 11)==6]

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

Проблема в том, что x простоуказатель на некоторые значения в памяти.Вы не можете "позвонить" это.Чтобы каждый раз получать разные результаты, вам нужно, чтобы x был методом

def x
  [(rand 2)==1, (rand 5)==3, (rand 11)==6]
end
...