查看完整版本: 帮忙看看这个素数小程序

wlm123 2008-8-12 10:53

帮忙看看这个素数小程序

# E3.10-4.rb 求50以内的素数
----------------------------------------------------
for i in 2..50       #50以内
    f=true            #起始假定每个数都是素数
  for p in 2...i      #比自身小的正整数(1和自身除外)
      if i%p==0       #如果能整除
        [color=Red] f=!f [/color]         #那么这个数不是素数
         break         #并且跳出这层循环
      end              # if 结束
  end                 #内层循环结束
print i," " [color=Red]if f[/color] #如果这个数保持起始假定,则打印
end #外层循环结束
----------------------------------------------------
#2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

谁知道这个红色字体部分,的语法怎么解释啊!看了半天看不懂,以前别的语言里也没看过类似的,好难懂!谁帮我看看!谢谢

xavier 2008-8-12 11:00

!在ruby里就是not,前面定义f=true,那么!f就是false了
后面那个是if修饰句。因为在ruby里任何表达式都返回一个值,而变量f在此时就是一个布尔值。[code]print i," " if f [/code]等价于[code]if f == true
    print i," "
end[/code]

wlm123 2008-8-12 11:12

偶!还是对这句有点不懂啊!

print i," " if f
如何等价
if f ==true
   print i," "
end
没看到语法里哪提到可以这样写的啊?我想真正理解一下为啥可以print i," " if f  这样写!:Q

xavier 2008-8-12 17:15

if修饰句并不是ruby才有的语法
在诸如javascript等脚本语言中早就有实现。
可以当语法生记下来,即:[code]   
语句 if 条件[/code]等价于[code]   
if 条件
      
   语句
end[/code]也可以用英语理解,把它当成条件状语从句就是了。比如
We won’t go on a picnic if it rains tomorrow.

[[i] 本帖最后由 xavier 于 2008-8-12 17:18 编辑 [/i]]
页: [1]
查看完整版本: 帮忙看看这个素数小程序