如果在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
答案 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