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 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥50 汇编语言除法溢出问题
  • ¥65 C++实现删除N个数据列表共有的元素
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波