专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Ruby/Rails

请问Ruby的一个有关问题

发布时间:2011-06-29 18:41:59 文章来源:www.iduyao.cn 采编人员:星星草
请教Ruby的一个问题。
Ruby的一个关于求数组的所有子集的程序,
下面的for循环中的对象区间判断,会修改j的值吗?还有j+a..j+b的对象区间是怎么变化的?

我增加打印看值的变化比较奇怪……

class Array

  def powerset
  num = 2**size
  ps = Array.new(num, [])
  self.each_index do |i|
  a = 2**i
  b = 2**(i+1) - 1
  j = 0
  while j < num-1
  for j in j+a..j+b
  ps[j] += [self[i]]
  end
  j += 1
  end
  end
  ps
  end

end

x = [1, 2, 3]
y = x.powerset
p y

------解决方案--------------------
这样理解,上例中,a,b在while循环之前,已经成定值。
j = 0
while j < num-1
for j in j+a..j+b
ps[j] += [self[i]]
end
j += 1
end 
j第一次被赋值为0,然后到for循环中
就成了for j in 0+a..0+b
注意这里的语法for .. in 语法,for j in ...中的j可以使用其它变量名,这里使用j的意思只是一个新的变量,和上面的j不是一回事。

for ... in 

end
是一个循环体,所以只要按我说的理解即可。

楼主的代码并不清楚是什么场景下得到的,所以只能就代码分析给你。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: