论坛首页 入门技术论坛

Ruby 学习笔记[1]有疑问

浏览 2003 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-14   最后修改:2009-04-27
puts"演示while not"
a=1
while not a>10
  print a," "
a+=1;
end
puts
for i in 1...10
print i," "
end
puts

puts"演示break"
c='a'
for i in 1..4
if i==2 and c=='a'
  c='b'
  print"\n"
  break
end
print i,c,""
end
puts "\n\n"

puts
puts"演示next"
c='a'
for i in 1..4
if i==2 and c=='a'
  c='b'
  print "\n"
  next
end
print i,c," "
end
puts
 
puts"演示redo"
c='a'
for i in 1..4
if i==2 and c=='a'
  c='b'
  print "\n"
  redo
end
print i,c," "
end 
puts "\n\n"

puts"演示retry"
c='a'
for i in 1..4
if i==2 and c=='a'
  c='b'
  print "\n"
  retry
end
print i,c," "
end
puts "\n\n"

puts "演示50以内的素数"
for i in 2..50
f=true
for p in 2...i
if i%p==0
  f=!f
  break
end
end
print i," " if f
end
puts

puts"演示times,upto,downto,each,step"
puts
4.times{print "Hi!"}
puts
1.upto(9){|i| print i if i<7}
puts
9.downto(1){|i| print i if i<7}
puts
(1...9).each{|i| print i if i<7}
puts
0.step(11,3){|i| print i}
puts

 

# E3.12-1.rb 求50以内的素数
$arr=[ ] #建立一个全局数组 $arr
$arr[0]=2
def add_prime(n) #定义方法 将 n以内的奇素数加入$arr
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
end
return true
end
add_prime(50)
print $arr.join(", "),"\n" #转换成字符串输出

 上面代码中我有点不太明白,为什么在return false后面没有换行?换行后,下面在加一个end,结果就不一样了,结果为(2,3)。。。请大家赐教

# E3.12-1.rb 求50以内的素数
$arr=[ ] #建立一个全局数组 $arr
$arr[0]=2
def add_prime(n) #定义方法 将 n以内的奇素数加入$arr
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
end
end
return true
end
add_prime(50)
print $arr.join(", "),"\n" #转换成字符串输出

 

把end再换一个位置,结果就成(2)

# E3.12-1.rb 求50以内的素数
$arr=[ ] #建立一个全局数组 $arr
$arr[0]=2
def add_prime(n) #定义方法 将 n以内的奇素数加入$arr
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
end
return true
end
end
add_prime(50)
print $arr.join(", "),"\n" #转换成字符串输出

主要是不理解,为什么return false 后面为什么if没有换行?

   发表时间:2009-04-15   最后修改:2009-04-15
return false 后面if没有换行是这样的:
正常if语句是:
if number % $arr[j] ==0  
#do something
end

这里是用了一个ruby习惯用法,被称为if语句修饰符(statement modifier)
eg:
flag=true
puts "Hello World!" if flag


所以你上面的代码如果要改,可以改成这样:
# E3.12-1.rb 求50以内的素数
$arr=[ ] #建立一个全局数组 $arr
$arr[0]=2
def add_prime(n) #定义方法 将 n以内的奇素数加入$arr
3.step(n,2){|num|$arr <<num if is_prime?num }
end
def is_prime?(number) #定义方法 判断一个数是否是素数
j=0 #数组下标
while $arr[j] * $arr[j] <=number
if number % $arr[j] ==0
return false
end
j +=1
end
return true
end
add_prime(50)
print $arr.join(", "),"\n" #转换成字符串输出


0 请登录后投票
   发表时间:2009-04-15  
头像很漂亮....
0 请登录后投票
   发表时间:2009-04-18  
Hooopo 写道

return false 后面if没有换行是这样的: 正常if语句是:


Java代码

if&nbsp;number&nbsp;%&nbsp;$arr[j]&nbsp;==0&nbsp;&nbsp; &nbsp;&nbsp;
#do&nbsp;something &nbsp;&nbsp;
end&nbsp;&nbsp;if number % $arr[j] ==0 
#do something
end这里是用了一个ruby习惯用法,被称为if语句修饰符(statement modifier) eg:


Java代码

flag=true&nbsp;&nbsp;
puts&nbsp;"Hello&nbsp;World!"&nbsp;if&nbsp;flag&nbsp;&nbsp;flag=true
puts "Hello World!" if flag所以你上面的代码如果要改,可以改成这样:


Java代码

#&nbsp;E3.12-1.rb&nbsp;求50以内的素数 &nbsp;&nbsp;
$arr=[&nbsp;]&nbsp;#建立一个全局数组&nbsp;$arr &nbsp;&nbsp;
$arr[0]=2&nbsp;&nbsp;
def&nbsp;add_prime(n)&nbsp;#定义方法&nbsp;将&nbsp;n以内的奇素数加入$arr &nbsp;&nbsp;
3.step(n,2){|num|$arr&nbsp;&lt;&lt;num&nbsp;if&nbsp;is_prime?num&nbsp;} &nbsp;&nbsp;
end &nbsp;&nbsp;
def&nbsp;is_prime?(number)&nbsp;#定义方法&nbsp;判断一个数是否是素数 &nbsp;&nbsp;
j=0&nbsp;#数组下标 &nbsp;&nbsp;
while&nbsp;$arr[j]&nbsp;*&nbsp;$arr[j]&nbsp;&lt;=number &nbsp;&nbsp;
if&nbsp;number&nbsp;%&nbsp;$arr[j]&nbsp;==0&nbsp;&nbsp;
return&nbsp;false&nbsp;&nbsp;
end &nbsp;&nbsp;
j&nbsp;+=1&nbsp;&nbsp;
end &nbsp;&nbsp;
return&nbsp;true&nbsp;&nbsp;
end &nbsp;&nbsp;
add_prime(50) &nbsp;&nbsp;
print&nbsp;$arr.join(",&nbsp;"),"\n"&nbsp;#转换成字符串输出&nbsp;&nbsp;# E3.12-1.rb 求50以内的素数
$arr=[ ] #建立一个全局数组 $arr
$arr[0]=2
def add_prime(n) #定义方法 将 n以内的奇素数加入$arr
3.step(n,2){|num|$arr &lt;&lt;num if is_prime?num }
end
def is_prime?(number) #定义方法 判断一个数是否是素数
j=0 #数组下标
while $arr[j] * $arr[j] &lt;=number
if number % $arr[j] ==0
return false
end
j +=1
end
return true
end
add_prime(50)
print $arr.join(", "),"\n" #转换成字符串输出

谢谢大虾昂!懂什么意思了。嘿嘿!!!解释的简单明了!
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics