作者goodword (佳話)
看板EE_DSnP
標題Re: [問題] 關於 CmdParser::regCmd
時間Thu Apr 9 14:05:47 2009
※ 引述《ysho ()》之銘言:
: 標題: [問題] 關於 CmdParser::regCmd
: 時間: Wed Apr 8 10:53:47 2009
:
: 想請問一下
:
: 在 CmdParser::regCmd 的 TODO 中提到
:
: insert (mandCmd, e) to _cmdMap; return false if insertion fails.
:
: 問題是,僅僅 insert (mandCmd, e) to _cmdMap 這個動作基本上不會失敗
:
: 那還有什麼情況下會導致 insertion fail 而需要 return false 呢?
:
: --
:
※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 140.112.4.234
: 推 timrau:insert有可能失敗啊,已經出現過,或是out-of-mem都會失敗 04/08 11:06
: → timrau:當然寫個command interface是不太容易寫到out-of-mem啦.... 04/08 11:07
: → ysho:所以如果mandCmd已在_cmdMap中,是要覆蓋還是return false? 04/08 11:33
: → ilway25:原po是神 04/08 12:28
: 推 ric2k1:不要覆蓋 & return false. Behavior 跟 map 的 insert 一樣 04/08 16:18
: → ysho:了解. 謝謝老師和學長! 04/08 17:59
這兒提到如果mandCmd已在_cmdMap中 則return false
也就是說 註冊了以下東西後
cmdMgr->regCmd("
HIStory", 3, new HistoryCmd);
cmdMgr->regCmd("
HELp", 3, new HelpCmd);
..........
便會在 _cmdMap 存下
HIS --link to-- 一個 HistoryCmd 物件
HEL --link to-- 一個 HelpCmd 物件
此時若再註冊 cmdMgr->regCmd("HISxxx", 3, new xxxCmd);
則因為 HIS 已存於 _cmdMap 所以應該不要覆蓋 & return false
我的問題是
若 註冊 cmdMgr->regCmd("
HISTOry",
5, new xxxCmd);
要註冊的是
HISTO 啊
但在 _cmdMap 並沒有
HISTO 只有
HIS
可是若執行 mcalc> hist
或是 mcalc> histo
mcalc> history
有些就不知道要呼叫 HistoryCmd物件 還是 xxxCmd物件了
所以這種情況 要不要 return false呢?
因為這還牽涉到 optCmd 有沒有一樣的問題
好像不怎麼容易寫 所以來請教老師
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.252.220
1F:推 ric2k1:啊, 你抓到 bug 了... 這的確是 cmdReg() 目前沒有考慮到的 04/09 16:50
2F:→ ric2k1:地方. 如果 HIStory 與 HISTOry 同時被 register 的話, 04/09 16:51
3F:→ ric2k1:會有 error 產生, 而且都會被 insert 到 map 裡, 但是如果 04/09 16:51
4F:→ ric2k1:下 hist, histo, 或是 his commands, 將只有 HIStory 會 04/09 16:53
5F:→ ric2k1:反應.... 目前先不要管這種狀況好了, 就假設 cmdReg 不會有 04/09 16:54
6F:→ ric2k1:這種情況發生. 04/09 16:54
7F:→ goodword:了解了 謝謝老師! 04/09 17:49