我正在用 Ruby 编写一个小程序来解析来自扑克网站的手牌历史日志。日志分为几行,看起来有点像这样:
Table 123456 NL Hold'em $1/$2
5 Players
Seat 3 is the button
Seat 1: randomGuy112 $152.56
Seat 2: randomGirl99 $200
Seat 3: PokerPro $357.12
Seat 4: FishCake556 $57.19
Seat 6: MooMoo $188.98
Dealt to MooMoo [Ah, Ks]
randomGuy112 folds
randomGirl99 raises to $7
etc.. etc..
我想在一个对象中总结这些信息,然后可能会以不同的方式呈现它或将其保存到数据库中。当我最初想到这个问题时,我以为我只需要一个带有许多正则表达式和几个 if/else 语句的真正直接的类。然后我意识到这可能会变成一个相当大的方法,并且可能成为调试/维护的噩梦。请记住,它需要在游戏的每个阶段(翻牌前、翻牌前等)循环以收集玩家的动作。
我也想用 TDD 方法来解决这个问题,但是“一个长方法”的方式意味着用于检查稍后输入的测试将依赖于早期的测试。
我对 Ruby 很陌生,还没有点击“Ruby 方式”来做事。我发现自己正在用另一种语言编写 C# 代码。
你能给我一些关于如何设计解析器的指示,这样它就不会是一大堆 if/else 语句并且更可测试吗?