1

我正在尝试将一个字符串从一个混乱(“SOME.String_With-bits.txt”)解析为一个干净的字符串(“Some String With Bits”)。我希望能够调用一个很好的简单方法并获得清理后的字符串 - 例如。clean_string = NameParser::parse(messy_string)

我正在尝试在这里做一个很好的可测试设计,但我真的很难想出一个结构(实际的解析代码没问题)。解析字符串非常复杂,我想将这些阶段分开。我试过这个:

class NameParser
  def self.parse(name)
    name = self.correct_case(name)
    name = self.correct_whitespace(name)
    name = self.remove_extension(name)
    return name
  end


  def self.correct_case(name) ....
  def self.correct_whitespace(name) ....
  def self.remove_extension(name) ....
end

它看起来很可怕。我能做些什么?谁能指出我在 Github 上某个地方的类似实现?

4

2 回答 2

1

我认为以下代码可以做到这一点:

class Object
  def chain_methods(start_value, *methods)
    methods.inject(start_value) { |last, method| self.send(method, last) }
  end
end

以及用法:

NameParser.chain_methods(name, :correct_case, :correct_whitespace, :remove_extension)
于 2012-09-12T08:18:32.027 回答
1

为了避免编写太多基于类的程序,而是编写更多基于对象的程序,您可以删除所有的自我。方法,并制作一个方便的方法 self.parse 如果你喜欢:

def self.parse string
  new.parse(string) 
end

或者使用初始化中的字符串创建解析器。这在一定程度上取决于您如何使用它,哪种感觉最好。

于 2012-09-12T08:23:06.380 回答