Re: [問題] 區塊問題

看板Ruby作者 (波卡)時間13年前 (2011/04/25 00:22), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《zx123456i (壁虎'.'a)》之銘言: : 底下是有問題的原始碼: : @sb.reject!{|sb| : if sb.y<-10 : true : else : @enemy.each{|enemy| : ex=enemy.x;ey=enemy.y : ew=enemy.w;eh=enemy.h : if Gosu::distance(sb.x+2,sb.y+5,ex+ew/2,ey+eh/2)<(ew+eh)/2 : sb.hurt(enemy) : true : else : false : end : } : end : } 問題出在這段程式碼沒錯 你作為reject參數的block,在sb.y < -10的時候會回傳true沒錯, 可是sb.y >= -10的時候呢? 我們都知道,沒明確指定回傳值的時候, Ruby會把最後一個statement的return值回傳回去 在sb.y >= -10的時候,你的block的最後一個statement是@enemy.each { ... } each到底會回傳什麼東西呢?從irb測試一下就知道了 ruby-1.9.2-p0 > [1,2,3].each { |x| p x } 1 2 3 => [1, 2, 3] 看到了嗎,each的回傳值是陣列本身,而陣列在作為真值判斷的時候是會被當成true的 所以自然那個子彈就被刪掉了 -- 難得看到有人在玩Gosu... XD -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.234.132

04/25 17:17, , 1F
原來是這樣子...
04/25 17:17, 1F
文章代碼(AID): #1Dj4ugjH (Ruby)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
1
1
文章代碼(AID): #1Dj4ugjH (Ruby)