免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2672 | 回复: 8
打印 上一主题 下一主题

刚学RUBY 遇到问题请指教。谢谢。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-06 14:54 |只看该作者 |倒序浏览
$arr = []
$arr[0] = 2
def add_prime(n)
   3.step(n,2){|num|$arr<<num if is_prime?num}
end
def is_prime?(number)
  j = 0
   while $arr[j] * $arr[j] <= number
   return false if number % $arr[j] == 0
  j+=1;puts "okok"
   end
return true
end
add_prime(5)
print $arr.join(","),"\n"

进到 while 里 每次都return false 后面的怎么执行啊。

论坛徽章:
0
2 [报告]
发表于 2010-12-06 15:04 |只看该作者
俺运行你的程序,咋都是输出:
okok
2,3,5
没错吧?

论坛徽章:
0
3 [报告]
发表于 2010-12-06 15:05 |只看该作者
应该是有执行后面的。

论坛徽章:
0
4 [报告]
发表于 2010-12-06 15:13 |只看该作者
我就是不明白,满足条件后就应该return  了。什么情况不returne 啊 。

论坛徽章:
0
5 [报告]
发表于 2010-12-06 15:15 |只看该作者
程序没错,是我不大懂为什么 while 里的 return 后 还执行。

论坛徽章:
0
6 [报告]
发表于 2010-12-06 15:39 |只看该作者
本帖最后由 2gua 于 2010-12-06 15:41 编辑

回复 5# 天空不也


你可以在while后加一条输出语句:puts "number = " + number.to_s + "; $arr[j] = " + $arr[j].to_s,看看结果:
  while $arr[j] * $arr[j] <= number
           puts "number = " + number.to_s + "; $arr[j] = " + $arr[j].to_s
           return false if number % $arr[j] == 0
          j+=1; puts "okok"
  end

输出:
number = 5; $arr[j] = 2

而你要return false的条件是:number % $arr[j] == 0,但此时number % $arr[j] 为1,当然不会返回false了,应该是继续执行下一条的j+=1语句。不知道这么说你可以理解吗?

论坛徽章:
0
7 [报告]
发表于 2010-12-06 15:44 |只看该作者
好的,理解了。写作C是这样是吧。
if(number % $arr[j] == 0)
return false;

我原来以为
return false;
if(number % $arr[j] == 0)
j=j+1;

谢谢喽。

论坛徽章:
0
8 [报告]
发表于 2010-12-06 16:38 |只看该作者
回复 7# 天空不也


    呵呵,这正是Ruby语法糖太甜的缘故了,要慢慢习惯Ruby的语法,另外,两条语句写在一行里,之间是要用分号隔开的哦,你那两条也没用分号隔开。

论坛徽章:
0
9 [报告]
发表于 2010-12-06 17:31 |只看该作者
但如果return false是单独的语句,后面的语句是肯定不会执行到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP