小编Sha*_*ird的帖子

在基于OOP的文本游戏中优雅的命令解析

我正在玩Ruby中的MUD /文字冒险(请不要笑).任何人都可以给我任何指向优雅,基于oop的解析输入文本的解决方案吗?

在这里,我们所说的并不比"把魔杖放在桌子上"更复杂.但一切都需要柔软; 我想稍后无痛地扩展命令集.

我目前的想法,略有简化:

  1. 每个项目类(框,表,房间,播放器)都知道如何识别"属于"它的命令.

  2. 游戏类理解一种特定于域的语言,涉及诸如"在对象Y内移动对象X","显示对象X的描述"等操作.

  3. 如果游戏类识别输入命令,则会询问房间中的每个项目.首先说是赢.

  4. 然后它将控制权传递给处理命令的item类中的方法.此方法重新命名DSL中的命令,将其传递回游戏对象以使其发生.

必须有陈旧,优雅的方式来做这些事情.但是,似乎无法谷歌任何东西.

ruby language-agnostic oop nlp

8
推荐指数
1
解决办法
1844
查看次数

使属性始终为数组的最佳方法是什么?

我正在使用我的MOO项目自学测试驱动设计,它带给我有趣的地方.例如,我写了一个测试,说特定对象的属性应该总是返回一个数组,所以 -

t = Thing.new("test")
p t.names  #-> ["test"]

t.names = nil
p t.names #-> []
Run Code Online (Sandbox Code Playgroud)

我有这个代码是可以的,但它对我来说似乎并不太可靠:

class Thing

   def initialize(names)
      self.names = names
   end

   def names=(n)
      n = [] if n.nil?
      n = [n] unless n.instance_of?(Array)

      @names = n
   end

   attr_reader :names
end
Run Code Online (Sandbox Code Playgroud)

有没有更优雅,Ruby-ish这样做的方式?
(注意:如果有人想告诉我为什么这是一个愚蠢的测试,那也会很有趣......)

ruby oop tdd

3
推荐指数
1
解决办法
311
查看次数

标签 统计

oop ×2

ruby ×2

language-agnostic ×1

nlp ×1

tdd ×1