ruby block问题

MyFreedom 2009-10-11 01:39:21
下面是输出一个小于100的Fibnancci数列:
class test1
def Fib(max)
i1,i2 = 1,1
while i1 <= max
yield i1
i1,i2=i2,i1+i2
end
end
end

Fib(100){|f| print f," "}

由于有点看不懂,现在我改一下
class test2
def test2.Fib
i1,i2 = 1,1
i1,
i2=i2, #去掉就报错
i1+i2
end
end

我想问的是:
1.在test2里面Fib的返回值是怎么算的?是不是[i1,i1+i2]?为什么去掉i2=i2会就报错?
2.test1的while循环是怎么执行的?我的想法是
第一次循环,i1=1
yield 1
[1,2]
第二次循环,i1=1
yield 1
[1,3]

第三次循环,i1=1......不对劲了...
yield 1
[1,4]
..........




才学ruby,习惯了c#和java式的语法,觉得ruby语法真他娘的诡异。。。
...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MyFreedom 2009-10-13
  • 打赏
  • 举报
回复
谢谢三位的回贴.我还得再习惯下
gadfly1981 2009-10-12
  • 打赏
  • 举报
回复
我觉得ruby的语法非常自然,
java今后很可能会出现类似ruby的这种block
习惯了就好了
gadfly1981 2009-10-12
  • 打赏
  • 举报
回复
ruby的函数,如果没有明确返回值,就返回最后一个表达式的值,
test2里面Fib里是
i1,
i2=i2, #去掉就报错
i1+i2
我这边执行起来是12,即先打印i1,后打印i2


test1的while循环
第一次
yield 1
[1, 2]

第二次
yield 1
[2, 3]

第三次
yield 2
[3,5]

i1,i2的值为什么如此,楼上已经说了



wuguanlin 2009-10-11
  • 打赏
  • 举报
回复
i1,i2=i2,i1+i2
类似:i1=i2;
i2=i1+i2;

2,763

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ruby/Rails
社区管理员
  • Ruby/Rails社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧