Ruby中的类型数组

时间:2010-07-27 15:40:21

标签: ruby arrays types

我试图通过迭代和检查有效性来创建各种类型的对象的实例。我需要一系列类型,所以我可以这样做:

def tryClasses(in)
    types = [Foo::A, Foo::B, Foo::C]

    types.each do |type|
        a = type.new(in)
        return a != null
     end
end

如何创建类类型? 这样做我得到一个NoMethodError(未定义的方法'A'代表Foo)

1 个答案:

答案 0 :(得分:4)

除了显而易见的语法错误(例如in是一个重复的单词,并且null在Ruby中拼写为nil),您展示的代码应该可以正常工作,当我将它复制并粘贴到我的Ruby安装中时,确实会这样做。当然,这假定实际存在类Foo::AFoo::BFoo::C。如果他们不这样做,那么代码显然不可行。

然而,它完全不是Rubyish,并且违反了本书中的每一个编码约定:

  1. 缩进是2个空格
  2. 方法名称为snake_case,而非camelCase
  3. 明确检查nil的相等性是否定的,只是简单地调用#nil?
  4. try_classes并不是一个意图揭示方法名称
  5. 和WTF确实in是什么意思?
  6. Rubyists更喜欢高阶方法而不是显式循环
  7. 这是您编写的代码的Rubyish版本:

    def can_create_object?(*args)
      [Foo::A, Foo::B, Foo::C].none? do |klass|
        klass.new(*args).nil?
      end
    end
    

    然而,请注意,我非常确信整个想法存在根本缺陷。