Project1

标题: alias有什么用处 [打印本页]

作者: TERENCE    时间: 2008-4-23 01:46
标题: alias有什么用处
在自订的方法里追加定义MS都会用到alias???
实际上应该怎么用??

例如:
class ABC
def apple
p "you are a "
......
end
在ABC类中 的 自订的方法apple中
追加定义 p "teacher."
alias怎么用??

如果懂得用alias,
class ABC里相同的东西就不会再重写一遍吧?? [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: hitlerson    时间: 2008-4-23 02:03
语法:

alias 新方法名 旧方法名

给方法或全局变量添加别名。可以给方法名指定一个标识符或 Symbol(不能写 obj.method 这样的表达式)。 alias 的参数不会被计算。

给方法添加别名时,别名方法将继承此刻的原始方法。此后,即使原始方法被重新定义,别名方法仍然保持着重定义前的老方法的特性。若您改变了某方法的内容后,又想使用修改前的方法时,别名会非常有用

作者: 3535    时间: 2008-4-23 03:02
alias apple2 apple
def apple
apple2
p "teacher."
end

作者: havealook    时间: 2008-4-23 03:06
举个例子
class Window_Base < Window
alias xrxs_mp7_initialize initialize
def initialize(x, y, width, height)
   xrxs_mp7_initialize(x, y, width, height)
   if $scene.is_a?(Scene_Menu) or
      $scene.is_a?(Scene_Item) or
      $scene.is_a?(Scene_Skill) or
      $scene.is_a?(Scene_Equip) or
      $scene.is_a?(Scene_Status)

     self.back_opacity = 0
   end
end
end

短小点的例子.
alias xrxs_mp7_initialize initialize #为老方法定义新的别名

xrxs_mp7_initialize(x, y, width, height) #先调用老方法,相当于把老方法重写了一遍
  
if $scene.is_a?(Scene_Menu) or
  $scene.is_a?(Scene_Item) or
  $scene.is_a?(Scene_Skill) or
  $scene.is_a?(Scene_Equip) or
  $scene.is_a?(Scene_Status)
  self.back_opacity = 0  #————这个数值可调,为透明程度0为完全透明
end

增加新的内容

那么,以后调用window_base的时候,实际上是调用现在新的initialize.


怎么说呢,首先,基本上这个alias 可以少写原来已有的整段整段的脚本.但是,如果有判断的地方,使用时就要注意了.新加的内容,不可以老方法的条件判断内.


def old
if oldx == 0
  oldx = 1
end
end
比如,我们如果想改,oldx=0时,oldx=2,不能用以下方法.
alias new old
def old
new
oldx = 2
end
在这个方法下,不管oldx为任何值,都会被赋值2
相当于,执行的是这个过程.

def old
if oldx == 0   
  oldx = 1
end
oldx = 2
end

所以,alias中,新方法对老方法的调用,是整段调用的,对于条件开关之类,一定要小心. [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 沉影不器    时间: 2008-4-23 03:49
提示: 作者被禁止或删除 内容自动屏蔽




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