请教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 代码如下:
class Array
def uniq_by
seen = {}
select{ |x|
v = yield(x)
!seen[v] && (seen[v]=true)
}
end
end
求ja ......
Ruby的一个关于求数组的所有子集的程序,
下面的for循环中的对象区间判断,会修改j的值吗?还有j+a..j+b的对象区间是怎么变化的?
我增加打印看值的变化比较奇怪……
class Array
de ......
连接Mysql数据库的时候,老是报这个错误!不知道怎么回事
各位大大们,能否告知,感激不尽
另外,我在公司域中,可能会出现一些问题
NoMethodError in BookController#list
undefined met ......
ruby 关于加密,各位大大们知道怎么解决?
非常感谢!!
密码不以明文的保存形式,首先对其进行SHA1加密,然后保存一个160位的散列码,当用户登录是,对其输入的密码做同样的加密处理,并将加密的结果与数据库 ......