だから私はRubyにかなり慣れていないので、まだイディオムを学んでいます。私はまだ静的型付けの強い考え方を持っているので、おそらく 1 つの問題は、私が過剰に型付けしているということです。とにかく、私の状況はこれです。
:name と :id を持つ Gene と呼ばれるオブジェクトがあります。Gene の配列を保持する Genotype と呼ばれる別のオブジェクトがあります。
特定の遺伝子型に特定の遺伝子が含まれているかどうかを確認したいと思います。Genotype.has_gene を渡せるようにしたいのですが? 遺伝子名、遺伝子 ID、または実際の遺伝子。前者の場合、ルーチンは name または id のいずれか渡された方に一致します。完全な Gene が渡された場合、ルーチンは両方の値の一致を要求します。
私のロジックは、渡された値が整数であるかどうかを確認することです。その場合、ID であると想定します。それ以外の場合は、文字列であるかどうかを確認し、名前であると想定します。それ以外の場合は、遺伝子かどうかを確認します。それ以外の場合は、不平を言って保釈します。
コードは次のようになります。
def has_gene?( gene )
if gene.is_a? Integer
id = gene
name = ""
elsif gene.is_a? String
id = nil
name = gene
elsif gene.is_a? Gene
id = gene.id
name = gene.name
else
raise "Can't intepret passed data as gene information"
end
name_valid = false
id_valid = false
@gene_specs.each do |current_gene_spec|
current_gene = current_gene_spec.gene
name_valid = name.empty? || name == current_gene.name
id_valid = id.nil? || id == current_gene.id
break if name_valid && id_valid
end
return name_valid && id_valid
end
ここで何かがおかしいと感じますが、特定できません。Rubyの有名な簡潔さが欠けているようです:-)
考え?