为什么数组在full_name枚举期间返回一个随机布尔值,而在ruby控制台中却不返回? irb

时间:2019-02-05 19:59:45

标签: ruby irb

如果在ruby控制台中执行以下数组,为什么数组(在map块内)仅返回[true,true,false]:x = [(rand 2)== 1,(rand 5)== 3,(rand 11)== 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〜P-d〜e ^ v#E_n%p〜o〜R-T

1 个答案:

答案 0 :(得分:3)

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