Block / Proc with Include for Ruby

时间:2013-08-15 13:38:12

标签: ruby ruby-on-rails

我正试图想办法将此作为一个过程。基本上,代码中唯一不同的部分是在子字符串匹配上它们是一个.include?而不是检查等于。

def check_exact_match(lead_attribute, tracker_attribute)
    return true if tracker_attribute.nil?
    return true if lead_attribute.downcase == tracker_attribute.downcase
    false
end


def check_substring_match(lead_attribute, tracker_attribute)
    return true if tracker_attribute.nil?
    return true if lead_attribute.downcase.include? tracker_attribute.downcase
    return false
end

2 个答案:

答案 0 :(得分:1)

我不确定我是否记得如何优雅地在Ruby中编码,但是这样的事情呢?

def check­_match(lea­d_attribut­e, track­er_attribu­te)­
    track­er_attribu­te.nil? or yield lead_­attribute,­ track­er_attribu­te
end

然后可以像这样调用该函数:

check_match("abcd", "bd") { |l, t| l.downcase == t.downcase }
check_match(la, ta) { |l, t| l.downcase.include? t.downcase }

答案 1 :(得分:0)

来自@busy_wait的修改。

def check­_match(lea­d_attribur­e, track­er_attribu­te, &condition)­
  track­er_attribu­te.nil? or condition.­call(lead_­attribute,­ track­er_attribu­te)
end

def check_exact_match(lead_attribute, tracker_attribute)
  check_match(lea­d_attribur­e, track­er_attribu­te) { |l, t| l.downcase == t.downcase }
end

def check_substring_match(lead_attribute, tracker_attribute)
  check_match(lea­d_attribur­e, track­er_attribu­te) { |l, t| l.downcase.include? t.downcase }
end