我试图通过迭代和检查有效性来创建各种类型的对象的实例。我需要一系列类型,所以我可以这样做:
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)
答案 0 :(得分:4)
除了显而易见的语法错误(例如in
是一个重复的单词,并且null
在Ruby中拼写为nil
),您展示的代码应该可以正常工作,当我将它复制并粘贴到我的Ruby安装中时,确实会这样做。当然,这假定实际存在类Foo::A
,Foo::B
和Foo::C
。如果他们不这样做,那么代码显然不可行。
snake_case
,而非camelCase
nil
的相等性是否定的,只是简单地调用#nil?
try_classes
并不是一个意图揭示方法名称in
是什么意思?这是您编写的代码的Rubyish版本:
def can_create_object?(*args)
[Foo::A, Foo::B, Foo::C].none? do |klass|
klass.new(*args).nil?
end
end
然而,请注意,我非常确信整个想法存在根本缺陷。