Project1
标题: 默认方法名 后面2个方法名 如何用 alias [打印本页]
作者: z2z4    时间: 2013-6-25 11:06
标题: 默认方法名 后面2个方法名 如何用 alias
 本帖最后由 z2z4 于 2013-6-25 11:53 编辑 
比如 默认的 方法名 def make_damage_value(user, item)
                   后面  def make_damage_value(user, item)
              在后面   def make_damage_value(user, item)    当然这个是最终的
 那如何利用 alias  别让 后面2个 互相 冲突
 
- def apply_critical(damage, item) 
-     item.cri_damage ? damage * item.cri_damage.truncate : damage * 3 
-   end 
- def apply_critical(damage, item) 
 
-     item.cri_damage ? damage * item.cri_damage.truncate : damage * 3 
 
-   end 
 
- def make_damage_value(user, item) 
-     value = item.damage.eval(user, self, $game_variables) 
-     value *= item_element_rate(user, item) 
-     value *= pdr if item.physical? 
-     value *= mdr if item.magical? 
-     value *= rec if item.damage.recover? 
-     value = apply_critical(value, item) if @result.critical 
-     value = apply_variance(value, item.damage.variance) 
-     value = apply_guard(value) 
-     @result.make_damage(value.to_i, item) 
-   end 
- def make_damage_value(user, item) 
 
-     value = item.damage.eval(user, self, $game_variables) 
 
-     value *= item_element_rate(user, item) 
 
-     value *= pdr if item.physical? 
 
-     value *= mdr if item.magical? 
 
-     value *= rec if item.damage.recover? 
 
-     value = apply_critical(value, item) if @result.critical 
 
-     value = apply_variance(value, item.damage.variance) 
 
-     value = apply_guard(value) 
 
-     @result.make_damage(value.to_i, item) 
 
-   end 
 
=======================================================
- def make_damage_value(user, item) 
-     value = item.damage.eval(user, self, $game_variables) 
-   
-     value = apply_reverse_heel(value, item) 
-   
-     value *= item_element_rate(user, item) 
-     value *= pdr if item.physical? 
-     value *= mdr if item.magical? 
-     value *= rec if item.damage.recover? 
-     value = apply_critical(value) if @result.critical 
-     value = apply_counter_gain(user, value, item) if user.actor_add_cheack[24] 
-     value = apply_variance(value, item.damage.variance) 
-     value = apply_guard(value) 
-   
-     value = apply_defense_wall(value, item) 
-     value = apply_invalidate_wall(value, item) 
-     value = apply_metalbody(value, item) 
-     value = apply_goldconvert(value, item) 
-     value = apply_mpconvert(value, item) 
-     value = apply_stand(value, item) 
-     @result.make_damage(value.to_i, item) 
-   end 
- def make_damage_value(user, item) 
 
-     value = item.damage.eval(user, self, $game_variables) 
 
-   
 
-     value = apply_reverse_heel(value, item) 
 
-   
 
-     value *= item_element_rate(user, item) 
 
-     value *= pdr if item.physical? 
 
-     value *= mdr if item.magical? 
 
-     value *= rec if item.damage.recover? 
 
-     value = apply_critical(value) if @result.critical 
 
-     value = apply_counter_gain(user, value, item) if user.actor_add_cheack[24] 
 
-     value = apply_variance(value, item.damage.variance) 
 
-     value = apply_guard(value) 
 
-   
 
-     value = apply_defense_wall(value, item) 
 
-     value = apply_invalidate_wall(value, item) 
 
-     value = apply_metalbody(value, item) 
 
-     value = apply_goldconvert(value, item) 
 
-     value = apply_mpconvert(value, item) 
 
-     value = apply_stand(value, item) 
 
-     @result.make_damage(value.to_i, item) 
 
-   end 
 
作者: DeathKing    时间: 2013-6-25 11:47
你想表达什么呢?似乎没太明白,我猜测的是:要分两次向make_damage_value添加内容。无论怎么说,按照下面这个方法都是没错的:
 
- #第一次补丁
 
- class X #<-你的类的名称
 
-   alias make_damage_value_patch1 make_damage_value
 
-   def make_damage_value(user, item)
 
-     make_damage_value_patch1(user, item)
 
-     # your code here
 
-   end
 
- end
 
 
- # 第二次补丁
 
- class X #<-你的类的名称
 
-   alias make_damage_value_patch2 make_damage_value
 
-   def make_damage_value(user, item)
 
-     make_damage_value_patch2(user, item)
 
-     # your code here
 
-   end
 
- end
作者: z2z4    时间: 2013-6-25 11:55
DeathKing 发表于 2013-6-25 11:47 
你想表达什么呢?似乎没太明白,我猜测的是:要分两次向make_damage_value添加内容。无论怎么说,按照下面 ...
我想把 这2个方法名 都保留 别让覆盖 要怎么做
作者: DeathKing    时间: 2013-6-25 12:01
z2z4 发表于 2013-6-25 11:55 
我想把 这2个方法名 都保留 别让覆盖 要怎么做
解决方法那不正是我2#给出的代码么?
作者: Sion    时间: 2013-6-25 12:17
 本帖最后由 Sion 于 2013-6-25 12:19 编辑 
alias 本来就是为了覆盖原来的方法才使用的,一般是给原有的方法添加新功能。
你如果要调用原来的方法,就调用新的方法名。
然后你能告诉我为什么一定要 alias 两次吗 - -b
作者: Sion    时间: 2013-6-25 12:31
 本帖最后由 Sion 于 2013-6-25 12:44 编辑 
- def method1
 
-   '方法1'
 
- end
 
 
- alias method2 method1# 为 method1 起一个别名 method2 。目前为止,method1、method2拥有一样的功能
 
 
- def method1 #而 现在 method1 被重新定义。
 
-   '新' + method2 
 
- end
 
- p method1 # => '新方法1''
 
- p method2 #=> '方法1' 
 
- def method2
 
-   '方法1'
 
- end
 
- def method1
 
-   '新' + method2
 
- end
 
 
- p method1 # => '新方法1''
 
- p method2 #=> '方法1'
作者: 圆寂丨不羁的风    时间: 2013-6-25 12:50
施主,重命名的话,大多情况下后者会覆盖前者的。所以别想着保留两个一样名字的。alias的实质,就是将后者的定义内容完全复制给前者。- def A
 
-   A = 0
 
- end
 
- alias B A  (alias:B:A)#alias 新名字 旧名称 OR alias: 新名字:旧名称
- alias B A
 
- def A
 
- B  #(A原内容) 
 
- B = 1 #新内容
 
- end
实际上相当于- def A
 
- A = 0  #(A原内容)  #是将A赋给B,B再赋回A,和原来一样,可是又不同。
 
- B = 1 #新内容
 
- end
最后的A的内容就是上面所示的功能,可是如果用alias的话,就可以无冲突插入:- alias C A #这个随便起,符合规范就是了#alias 新名字 旧名称
 
- #此时C的内容相当于上面的 A = 0 ; B = 1
 
- def A
 
-  C
 
- A_1 = 1
 
- end
 
 
 
- def
 
- A = 0
 
- B = 1 
 
- A_1 = 1
 
- end
作者: 圆寂丨不羁的风    时间: 2013-6-25 13:01
 本帖最后由 圆寂丨不羁的风 于 2013-6-25 13:04 编辑 
由于没见到make_damage_value(user, item) 的关于user和item相关的用法, 只好推测是这样了:假如施主后面两个ruby代码是互相独立的脚本,而第一个是放在上面的老定义,就不用改了。这种情况下,下面的代码改为:-   
 
- alias  make_damage_value_new(user, item) make_damage_value(user, item) 
 
- #前面新名字随便改,别重复就是了,但记得变量(,)的内容要保持一致。
 
- #这里贫道也没底。没改过带复杂函数的,注,下文带#的,若有备份可以直接删去。
 
- #实际上要做的就是把重复内容去掉,然后作为一个新内容加进去。
 
- def make_damage_value(user, item)
 
-       make_damage_value_new(user, item) 
 
-  #   value = item.damage.eval(user, self, $game_variables)
 
-       value = apply_reverse_heel(value, item)   
 
-  #   value *= item_element_rate(user, item)
 
-  #   value *= pdr if item.physical?
 
-  #   value *= mdr if item.magical?
 
- #    value *= rec if item.damage.recover?
 
- #    value = apply_critical(value) if @result.critical
 
-     value = apply_counter_gain(user, value, item) if user.actor_add_cheack[24]
 
- #    value = apply_variance(value, item.damage.variance)
 
- #    value = apply_guard(value)
 
-     
 
-     value = apply_defense_wall(value, item)
 
-     value = apply_invalidate_wall(value, item)
 
-     value = apply_metalbody(value, item)
 
-     value = apply_goldconvert(value, item)
 
-     value = apply_mpconvert(value, item)
 
-     value = apply_stand(value, item)
 
-     @result.make_damage(value.to_i, item)  #这句不知道要不要一定放最后,试试用#注释它,不行的话注释前面的脚本。
 
-   end
 
作者: z2z4    时间: 2013-6-25 13:04
A因为 我自己 有一套 很强大的脚本 里面包括很多的  然后 我又加个 B技能暴击伤害和暴击率的设置 这个是独立的  这样堆 技能暴击伤害 是控制住了 蛋暴击率没法控制 设置1 他依然 会有100%的几率 我把他放到 A脚本的前面 A的脚本  就开始出错了
作者: 圆寂丨不羁的风    时间: 2013-6-25 13:18
z2z4 发表于 2013-6-25 13:04 
A因为 我自己 有一套 很强大的脚本 里面包括很多的  然后 我又加个 B技能暴击伤害和暴击率的设置 这个是独 ...
 其实呢……发现事实上后者的内容几乎涵盖了前者,试试直接删掉前者(在前者头加个左对齐顶格的=begin尾加个=end)………………
  其实呢……发现事实上后者的内容几乎涵盖了前者,试试直接删掉前者(在前者头加个左对齐顶格的=begin尾加个=end)………………
| 欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |