我在操练主义上做了一些练习,这是我的解决方案之一:一个基本的RNA/DNA转录器。一开始我很高兴,但现在,再看一遍,这个解决方案对我来说是非常重复的。
需要以下两种方法,因为有测试可以确保我们已经实现了它们。这只是我试图重构的方法中的代码。
def self.of_dna(dna)
if dna.include? 'U'
raise ArgumentError.new('Incorrect nucleotide detected. Please enter a DNA sequence.')
else
return dna.gsub(/[GCTA]/, 'G' => 'C', 'C' => 'G', 'T' => 'A', 'A' => 'U')
end
end
def self.of_rna(rna)
if rna.include? 'T'
raise ArgumentError.new('Incorrect nucleotide detected. Please enter an RNA sequence')
else
return rna.gsub(/[GCAU]/, 'G' => 'C', 'C' => 'G', 'A' => 'T', 'U' => 'A')
end
end正如您所看到的,在一种方法中,我正在执行以下替换:
“G”代表“C”“C”代表“G”“A”代表“T”“U”代表“A”
在另一种方法中,情况正好相反。有谁能为我指出一个正确的方向,使之简单化,并使其更加简洁?
发布于 2015-05-12 22:22:28
为了使它更加简洁和可读性:
tr而不是regex,就像@200_success指出的那样if构造实现短路输入误差return以下是它所凝聚的内容:
def self.of_dna(dna)
raise ArgumentError, 'Incorrect nucleotide' if dna.include? 'U'
dna.tr('GCTA', 'CGAU')
end发布于 2015-05-12 15:05:23
对于这种替换,一个更合适的函数是String#tr。
https://codereview.stackexchange.com/questions/90533
复制相似问题