Ruby:通过解析

时间:2019-07-12 18:29:26

标签: ruby parsing url uri

我的目标是转换其中任何一个

收件人:

  • www.google.com

我做了以下事情:

def parse_url(url)

    uri = URI.parse(url)

    return uri.host if uri.scheme
    return uri.to_s if uri.to_s[0, 4] == 'www.'

    "www.#{url}"
end

但是我觉得可能还有其他一些标准可以使用,因为它看起来不那么优雅。

1 个答案:

答案 0 :(得分:1)

始终确保代码首先执行您想要的操作。如果稍后有代码气味,请考虑使用各种方法来执行所需的操作,然后选择最容易理解的方法。

Terse代码不一定是最优雅的代码,通常很难理解,这可能导致后来的错误在其他人不得不找出错误所在并且不理解导致无法理解的逻辑的辉煌时引入。

您的代码没有执行您想要的操作:

parse_url('http://google.com') # => "google.com"

这就是我写的快速而肮脏的第一遍:

require 'uri'

def parse_url(url)

    uri = URI.parse(url)

    # if it's not a generic URI...
    if uri.scheme

      # peek at the host
      url_host = uri.host

      # if it starts with "www." then return it as is...
      if url_host[0,4] == 'www.'
        return url_host

      # else add the prefix and return it
      else
        return 'www.' + uri.host
      end

    # if it's a generic...
    else
      if url[0,4] == 'www.'
        return url
      else
        return 'www.' + url
      end
    end

end

parse_url('http://www.google.com') # => "www.google.com"
parse_url('www.google.com') # => "www.google.com"
parse_url('http://google.com') # => "www.google.com"
parse_url('google.com') # => "www.google.com"

我确定我可以提出更严格的代码,但是我的关注点是同伴,或者我自己的未来自我,需要在清晨进行调试,以找出问题所在。为了对那个人友好,我宁愿保持简单。