推 sunev: 那你的 "c() only affects a()" 不會改變a()嗎? 01/29 17:51
我覺得 c() 不論有沒有影響 b() 應該不會影響控制的流程(?
實際上 在我的程式碼裡 c() 是會影響 b() 的 但是我希望能簡化問題
每次迭代的時候都會觸發 c() 使得 !a() 可能突然變成假而退出第三行的 while
在這樣的情況 下一行的 break 一定會發生而退出第一行的 while
但是如果是在 b() 為假的情況下退出的話 下一行的 break 就一定不會發生 OAO
簡短來說 我希望在第三行 while 發生 short circuit evaluation 的時候
直接跳出第一行的 while 不想再多一次已知結果的判斷
推 sunev: while(!a()){while(b()){c();}} ? 01/29 18:10
這樣 c() 可能會做過頭 XD
要同時 !a() 且 b() 都為真的時候才能做 c()
推 AstralBrain: 不call c()的話a()和b()就不會變嗎 01/29 18:11
是的 不是 multi-threading www
推 AstralBrain: while (!a()) { if (b()) c(); } ? 我想的是這樣01/29 18:13
這樣好像也不太對 XD
推 AstralBrain: 先確認一下01/29 18:30
→ AstralBrain: a=true => break, (a,b)=(false,true) => call c01/29 18:31
→ AstralBrain: (a,b)=(false,false) => loop 這會卡死?01/29 18:31
→ AstralBrain: 我有理解錯嗎01/29 18:31
對的 只是不會發生 loop 這麼慘的情況 XD
時序上 a() 一開始都是 false b() 則是有時真有時假
推 ckc1ark: 還有remaining code section可以動a()和b()吧01/29 18:33
下面的 code section 都沒有 a() 跟 b()
推 ckc1ark: while(!a()){if(b()){c();}else{//remain..}} 這樣等價吧01/29 18:47
哈哈哈 你的好像是第一個對的...XD
→ MOONRAKER: too hard01/29 18:47
推 AstralBrain: 看起來b()根本可以假設永遠是true01/29 18:49
→ AstralBrain: 一變false就再也沒機會call到c了 不要看它比較好 XD01/29 18:50
推 AstralBrain: while(!a()){c();remain...} 就可以01/29 18:53
→ AstralBrain: 如果b有side-effect再隨便找個地方放01/29 18:54
已經補上流程圖 QQ 不能假設 b() 永遠是對的
推 ckc1ark: 我剛問的是remaining code會不會影響之後a()和b()的結果01/29 18:58
會 而且一定會 OAO
推 LPH66: 這樣就 while(!a()){if(b()) c(); else d();} 01/29 19:11
→ LPH66: 你把你的流程圖調一下就可以看到這個結構 01/29 19:12
好像真的是這樣 THX >皿<
推 chuegou: 怒goto 01/29 19:45
感謝各位 QQ
while (!a()) { if (b()) c(); else { //remain } }
是對的沒錯!! 好感動嗚嗚嗚 謝謝你們 wwwww
推 nova06091: 我都唸 肯輟flow 01/30 20:45
→ nova06091: 恥ずかしいね 01/30 20:46
→ hunandy14: えぇっ! 現在才發現原來是 恥ずかしいね 02/01 21:11
ばれたか!!! 恥ずかしい www
※ 編輯: Hazukashiine (122.116.185.23), 02/01/2018 22:29:23