【问题标题】:How can I DRY out this Ruby Code我怎样才能干掉这个 Ruby 代码
【发布时间】:2013-03-26 22:18:47
【问题描述】:

我怎样才能干出以下 Ruby 代码:

    x = 'a random string to be formated'
    x = x.split('^')[0] if x.include?('^')
    x = x.split('$')[0] if x.include?('$')
    x = x.split('*')[0] if x.include?('*')

我正在寻找极其优雅的 ruby​​ one 班轮,但我很难找到它。 不过它可能应该有点可读性。

谢谢

【问题讨论】:

    标签: ruby refactoring dry


    【解决方案1】:

    我想这可能就是你要找的东西

    x.split(/\^|\$|\*/)

    【讨论】:

    • x.split(Regexp.union'^', '$', '*') 是一样的,但看起来不那么可怕(union 方法负责转义)。
    • 这就是我一直在寻找的,我喜欢 union 方法以及 steenslag,谢谢
    【解决方案2】:

    这对我有用:

    x = "a random string to be formatted"
    ['^', '$', '*'].each { |token|
      x = x.split(token)[0] if x.include?(token)
    }
    

    【讨论】:

      【解决方案3】:

      根据您提供的代码

      x = 'a random string to be formated'
      
      %w(^ $ *).each do |symbol|
        x = x.split(symbol)[0] if x.include?(symbol)
      end
      

      【讨论】:

        【解决方案4】:

        你正在寻找这个正则表达式:

        string.match(/^([^^$*]+)[$^*]?/).captures[0]
        

        它返回第一次$, ^, or *之前的所有字符,或者字符串的结尾。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-21
          • 2018-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多