作者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