Re: [問題] ruby的bug?

看板Ruby作者 (zero00072)時間12年前 (2012/09/11 13:05), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1GJiQlxK (Ruby)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1GJiQlxK (Ruby)