首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RNA/DNA转录子

RNA/DNA转录子
EN

Code Review用户
提问于 2015-05-12 14:56:39
回答 2查看 224关注 0票数 2

我在操练主义上做了一些练习,这是我的解决方案之一:一个基本的RNA/DNA转录器。一开始我很高兴,但现在,再看一遍,这个解决方案对我来说是非常重复的。

需要以下两种方法,因为有测试可以确保我们已经实现了它们。这只是我试图重构的方法中的代码。

代码语言:javascript
复制
  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”

在另一种方法中,情况正好相反。有谁能为我指出一个正确的方向,使之简单化,并使其更加简洁?

EN

回答 2

Code Review用户

回答已采纳

发布于 2015-05-12 22:22:28

为了使它更加简洁和可读性:

  • 您可以使用tr而不是regex,就像@200_success指出的那样
  • 使用Ruby的尾部if构造实现短路输入误差
  • 省略不必要的return
  • 省略输入DNA序列的信息。用户输入不是这些方法的责任。消息应该更接近处理输入的位置。

以下是它所凝聚的内容:

代码语言:javascript
复制
 def self.of_dna(dna)
   raise ArgumentError, 'Incorrect nucleotide' if dna.include? 'U'
   dna.tr('GCTA', 'CGAU')
 end
票数 2
EN

Code Review用户

发布于 2015-05-12 15:05:23

对于这种替换,一个更合适的函数是String#tr

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/90533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档