Project1

标题: 为啥许多人都会把一个判断方法搞得这么麻烦 [打印本页]

作者: 英顺的马甲    时间: 2011-1-7 16:43
标题: 为啥许多人都会把一个判断方法搞得这么麻烦
本帖最后由 英顺的马甲 于 2011-1-7 16:49 编辑

为啥许多人在判断一个是否数字在两个数字之间时,
都用了一个很麻烦的算法,就拿鼠标图片响应来做例子:
  if   if mx < lx or mx > rx or my < ty or my > by or
     self.bitmap.get_pixel(mx-lx,my-ty).alpha == 0
     @picture.name = @picture.name.split(/_/)[0]+"_"[email protected](/_/)[1]
     return
   end
为啥不更直接的用:
   if not mx.between?(lx,rx) or not my.between?(ty,by)  or
     self.bitmap.get_pixel(mx-lx,my-ty).alpha == 0
     @picture.name = @picture.name.split(/_/)[0]+"_"[email protected](/_/)[1]
     return
   end
难道用个.between?真比用这么长的算法还难?
作者: enghao_lim    时间: 2011-1-7 16:47
between沒效率……(笑)
作者: DeathKing    时间: 2011-1-7 17:11
底层实现应该一样吧,不过between?和include?比较好理解罢了。
  1. C:\Documents and Settings\DeathKing>ri Integer#between?
  2. ---------------------------------------------------- Comparable#between?
  3.      obj.between?(min, max)    => true or false

  4.      From Ruby 1.9.1
  5. ------------------------------------------------------------------------
  6.      Returns +false+ if _obj_ +<=>+ _min_ is less than zero or if
  7.      _anObject_ +<=>+ _max_ is greater than zero, +true+ otherwise.

  8.         3.between?(1, 5)               #=> true
  9.         6.between?(1, 5)               #=> false
  10.         'cat'.between?('ant', 'dog')   #=> true
  11.         'gnu'.between?('ant', 'dog')   #=> false



  12. C:\Documents and Settings\DeathKing>ri Range#include?
  13. --------------------------------------------------------- Range#include?
  14.      rng.member?(val)  =>  true or false
  15.      rng.include?(val) =>  true or false

  16.      From Ruby 1.9.1
  17. ------------------------------------------------------------------------
  18.      Returns +true+ if _obj_ is an element of _rng_, +false+ otherwise.
  19.      If beg and end are numeric, comparison is done according magnitude
  20.      of values.

  21.         ("a".."z").include?("g")  # => true
  22.         ("a".."z").include?("A")  # => false
复制代码

作者: summer92    时间: 2011-1-7 21:17
看来只有提高CPU频率了
作者: 柳之一    时间: 2011-1-7 21:21
这个和难没有关系吧。
.between的算法估计和第一个差不多

写脚本其实越麻烦越好,到时候就明白了
作者: chaochao    时间: 2011-1-8 00:16
为啥你不重载个mx.between?(lx,rx,ty,by)方法?
作者: 苏小脉    时间: 2011-1-8 13:42
可能是:
1、这“许多人”并不知道有这么一个内置的方法;
2、这“许多人”是硬件消耗 minimalist,追求手动优化(实际上 Ruby 1.8 也确实只能手动优化)。
作者: hitlerson    时间: 2011-1-8 13:54
楼主真无聊。不会用的不会知道这个复杂的东西的。会用的也不会去用那个麻烦的东西的。比起翻说明书,自己创造个,岂不快哉。
  1.   #---------------------------------------------------------------------------
  2.   # ● 鼠标在一个区域内
  3.   #---------------------------------------------------------------------------
  4.   def onside(x0,y0,x1,y1)
  5.     if @mouse_x > x0 and @mouse_x < x0+x1 and @mouse_y > y0 and @mouse_y < y0+y1
  6.       return true
  7.     else
  8.       return false
  9.     end
  10.   end
复制代码

作者: 做游戏的新手    时间: 2011-1-8 23:09
就像PASCAL INC(i) 与 i:=i+1一样的…… 去看看汇编就知道了 工作原理完全不同




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1