易截截图软件、单文件、免安装、纯绿色、仅160KB

请教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
j+a..j+b 是一个区间。在ruby中,如果你想从1到10循环
就是1..10.each
为什么会这样,因为在ruby中所有内容都被看作对象,所以出现你感觉奇怪的地方。

j+a..j+b在什么时候计算呢?每次j值的变化都会引起区间的改变吗?

这个地方比较难以理解。


已经明白了,多谢!
代码是The Ruby Way中的例子。

Ruby中的for类似迭代器,先计算区间表达式的值,将区间的每个值赋给循环变量,再执行循环体。
重要的是:循环变量不是循环的局部变量,退出循环后,仍然有意义。因此造成了例子中的j变量的变化。

感觉Ruby的For循环和C/C++完全是迥异的。


相关问答:

现在学习RUBY,有没有前途。

做了三年。NET了
当然。NET水平也很烂
想多学一些新的语言
这两天在学习RUBY
不知道将来有没有前途

RUBY前辈们,指点一二啊。
别这山看着那山高,其实它们只是你的一个工具,就象武林高手拿个树叶 ......

谁知道好用的Ruby IDE?

谁知道好用的Ruby IDE?


路过帮顶

帮顶

cheng_er你这个头像比我的还黄啊.

友情Up!~

纯顶

引用
cheng_er你这个头像比我的还黄啊.


这年头,奇怪的事情怎么这么多呢我就说
......

ruby连接Mysql问题

连接Mysql数据库的时候,老是报这个错误!不知道怎么回事
各位大大们,能否告知,感激不尽

另外,我在公司域中,可能会出现一些问题

NoMethodError in BookController#list
undefined met ......

ruby如何格式化数字?(从右边起每三位一个逗号隔开)

数字从右边起每三位用一个逗号隔开
1232445 ⇒ 1,232,445
---- ChangeStr.rb内容 ------------------------------------------
def change_str(num)
  str = num.to_s
  nil while str. ......

ruby系统命令问题

我在ruby on rails上执行系统命令,但是该系统命令都在我默认的路径上执行的,即/var/www/my。现在我用ruby语言编程,可创建了一个新目录aaa(system "mkdir aaa"即可),但是我不能进入aaa目录下进行操作 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号