nj0308 2009-08-24 20:04
浏览 161
已采纳

怎样抽象方法

我有多个类似的方法

[code="ruby"]def fun1
if ARRAY_PRE.include? array[0]
return true if ARRAY_PRE.include? array[1]
return (! ARRAY_PRE.include? array[2])
else
return false unless ARRAY_PRE.include? array[1]
return (ARRAY_PRE.include? array[2])
end
end

def fun2
if array[0] MIDDLE
return true if array[1] > MIDDLE
return (! array[2] > MIDDLE)
else
return false unless array[1] > MIDDLE
return (array[2] > MIDDLE)
end
end

...[/code]
仅仅判断标准不同,依据DRY原则,应该有类型下面这样的方法。

[code="ruby"]def det
if yield array[0]
return true if yield array[1]
return (! yield array[2])
else
return false unless yield array[1]
return (yield array[2])
end
end[/code]

思路是这样,但这个方法没法调用。
请大家帮忙想想究竟应该如何抽象这个框架方法。
[b]问题补充:[/b]
谢谢大家的踊跃答复。

原来是我疏忽了,看到yeild后的参数不一致,就想当然的以为不能直接调用。却原来可以直接用一个参数代替传入。

实例代码中的array应该是@array或$array。不过思路是一样的。

  • 写回答

19条回答 默认 最新

  • winteen 2009-08-24 21:34
    关注

    你的方法是可行的 是可以调用的。
    def det(array)

    if yield array[0]

    return true if yield array[1]

    return (! yield array[2])

    else

    return false unless yield array[1]

    return (yield array[2])

    end

    end

    p det([1, 2, 3]){|x|
    x > 1.5
    }# true

    p det([1, 3, 4]){|x|
    [1, 4].include?(x)
    }# false

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(18条)

报告相同问题?

悬赏问题

  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?