推 justinj :受教了.... 04/10 17:51
※ 引述《justinj (黑旋風)》之銘言:
: 檔案不存在: /u/j/justinj/area/aaa
: 檔案不存在: /aaa
: 執行時段錯誤: *call_other() couldn't find object
: 程式: adm/simul_efun/find_object_or_load.c(adm/obj/simul_efun.c):19
: 物件: /adm/obj/simul_efun
: /u/j/justinj/test/tools/true3#12723 "cmd_set"
: u/j/justinj/test/tools/true3.c:1009
: /adm/obj/simul_efun "find_object_or_load"
: adm/simul_efun/find_object_or_load.c(adm/obj/simul_efun.c):19
: 當設定
: if(!ob=find_object_or_load(obj))
: return notify_fail("這個人目前不在線上或沒有這個房間。\n");
: 只要ob不存在的話..每次到這裡就會卡住了...要怎麼處理..
if( catch( ob=find_object_or_load(obj) ) )
return notify_fail("這個人目前不在線上或沒有這個房間。\n");
假設上面藍色字的部份在讀取上出了問題時,catch
可以補捉到該問題的訊息;沒問題時,catch 到的東
西就是空。
所以當 catch 有抓到東西時=讀取有問題。
當你沒用 catch 時,它出問題就會停在那裡並吐訊
息給你,當你用 catch 時它出問題則不會停在那。
你也可以這樣寫...
str = catch(ob=find_object_or_load(obj));
if(str && str!="")
return notify_fail(str+ // 先吐出它 catch 到的訊息
"這個人目前不在線上或沒有這個房間。\n");
// 然後若沒問題這時 ob 就已經等於 find_object_or_load(obj) 了
catch 經常使用在一種場合,以我的工作室為例,一般來說
要 load 一個房間,要做兩個以上的判斷,像是檔案存不存
在、是不是 .c 檔、能不能被 find_object_or_load 等..
但底下一行就能搞定..
if(!catch(ob=find_object_or_load("/u/l/laechan/workroom")))
因為如果我的工作室有問題,則上面 catch 到的東西就不為
空;反過來說若沒問題,catch 到的為空,則 ob 自然就讀
取成功的意思。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: laechan 來自: 122.117.9.179 (04/10 12:26)