Re: [問題] ruby的bug?
※ 引述《ireullin (raison detre)》之銘言:
: 請問一下各位
: 小弟使用的是ruby 1.9.3 on windows 7
: 執行下面程式兩段程式碼理應會得到相同結果
: 可是第一段卻會一直列印出"next"
: 而無法結束
: 請問這是ruby的bug嗎
: # 這個會陷入無限回圈
: Dir.foreach('./') do |file|
: until(file =~ /[0-9]{8}/)
: p 'next'
: next
: end
: p file
: end
在 foreach do |file| 內,此區塊只針對目前掃到的 file,所以應該是唯一的,
也就是說假如檔案名稱是:01238765 的話,那此區塊裡 file 就會被指派為 01238765,
根據您的條件式 file =~ /[0-9]{8}/,此處的 01238765 就會被認定為 true。
但是注意了,您用的是「until」,until 的意思是:
while !
也就是說上面的 true 會被指為 false。
但這不是重點,重點是 while 是迴圈,若條件沒有中途改變,是不會離開的。
有看到您想使用 next 來強制跳離,但是 next 只會對最近的迴圈有影響;
也就是說只會對這個「until」有用,所以執行完 next,
我們的 file 變數還是沒有改變,既然沒有改變,當然不會跳開迴圈。
: # 這個正常執行
: Dir.foreach('./') do |file|
: if(file !~ /[0-9]{8}/)
: p 'next'
: next
: end
: p file
: end
當然不一樣,if 是條件式,跟迴圈是兩件事,它就像衛生紙一樣,用了就丟。
既然不是迴圈,所以 next 不會針對 if 操作,最近的迴圈在 foreach do |file| end,
所以 next 後,後面的 p file 也不會動作,直接跳到下一個檔案,除非沒有進入 if。
if == unless !
while == until !
這樣的說明希望您會了解。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.126.162.140
→
09/11 16:39, , 1F
09/11 16:39, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章