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 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?