易截截图软件、单文件、免安装、纯绿色、仅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 block问题

下面是输出一个小于100的Fibnancci数列:
class test1
  def Fib(max)
    i1,i2 = 1,1
    while i1 <= max
      yield i1
      ......

唐僧!ruby on rails!我欲哭无泪。

本人有点C#跟java底子,回头直接来学ROR。
怎么感觉ROR就那么恶心人,但又很想学好,迫于各方面压力也只能学习ROR。学了大概有两个月吧,可我总感觉自己门都没入……太多的伤心的话就不想多说了,只希望看到的高 ......

Ruby到底干吗的?

主要做哪个方面的?是编译型的么?
一门编程语言,不是编译型的

看看这里吧:
http://www.ruby-lang.org/en/

ruby是一门解释型的面向对象语言。最具代表的应用是rails---web快速开发框架
......

初学ruby 怎么把一个类导入呢

1. 例如在
Person.rb 中 
Python code:

class Person
def talk
puts "nihao"
end

end
Student.rb
Python code:

class Student < Person
def talk
puts &quo ......

ruby和MinGW的一次融合 - C/C++ / C++ 语言

希望给大家提供一些新的思路.
我们在使用C编程时会遇到一个问题,比如头文件的一个函数包含在一个lib 中,但是
在实际连接中我们不知道它在哪个库中。也许可行的一种办法是直接上网查询某个
函数的依赖条件,这对 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号