查看: 3508|回复: 6

[已经解决] def的问题

[复制链接]
梦石
0
星屑
1388
在线时间
343 小时
注册时间
2016-7-17
回帖
82
发表于 2020-5-8 22:05:04 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 b200077 于 2020-5-8 22:06 编辑

有没有办法使用输入值当做方法去引用呢?引用的类会分别使用不同名子的方法,主要如下,或者有没有更简单的写法
[pre lang="ruby"]      def equips_effict(ability)
         n = {}
     case ability
     when "death"
       #獲取敵方死亡發動的能力
     equip_slots.size.times do |i|           
      if @equips != nil   
       value = @equips.death
       if n.has_key?(value[0])
       n[value[0]] += value[1]
     else
       n[value[0]] = value[1]
     end
   end
    add_ability(n)
     end
          when "install_cost"
       #獲取敵方死亡發動的能力
      
     equip_slots.size.times do |i|   
       if @equips != nil

       value = @equips.install_cost
         puts "value為#{value}"
         if value != nil
       if n.has_key?(value[0])
       n[value[0]] += value[1]
     else
       n[value[0]] = value[1]
     end
     end
     end
     puts "install_cost為#{n}"
      add_ability(n)
     end
               when "atk_settle"
       #獲取敵方死亡發動的能力
     equip_slots.size.times do |i|
       if @equips != nil
       value = @equips.atk_settle
        if value != nil
       if n.has_key?(value[0])
       n[value[0]] += value[1]
     else
       n[value[0]] = value[1]
     end
     end
     end
     end
     puts "atk_settle為#{n}"
        #增加能力
        add_ability(n)
      end
      end[/pre]
这三个判断只差在@equips.方法名上,能不能写成一个就好
梦石
0
星屑
11809
在线时间
623 小时
注册时间
2016-8-25
回帖
1340

R考场第七期纪念奖

发表于 2020-5-8 22:51:23 | 显示全部楼层
更简单的写法吗

我建议用一堆分号
能节省不少行数
(手动滑稽)
回复

使用道具 举报

梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2020-5-9 00:30:38 | 显示全部楼层
[pre lang="ruby"]def equips_effict(ability)
  n = {}
  equip_slots.each do |e|
    next unless e
    value = e.__send__(ability)
    n[value[0]] = (n[value[0]] || 0) + value[1]
  end
  add_ability(n)
end[/pre]

用__send__来调用
第一个参数是方法名,后面的参数是要执行方法的参数列表
它还有一些其他变形,如果需要用到再自己去了解。

另外,不知道你原来写是什么,建议认真学习脚本,
尽量不要再写这种既为难自己又为难别人的坏代码。

评分

参与人数 1赞 +1 收起 理由
b200077 + 1 谢谢大佬,会努力改进的~

查看全部评分

用头画头像,用脚写脚本
回复

使用道具 举报

梦石
0
星屑
1388
在线时间
343 小时
注册时间
2016-7-17
回帖
82
 楼主| 发表于 2020-5-10 16:31:18 | 显示全部楼层
KB.Driver 发表于 2020-5-9 00:30
def equips_effict(ability)
  n = {}
  equip_slots.each do |e|

传递之后,匹配不到怎么办
  1.    def ability(args)
  2.         if @note =~ /<#{args} = (\w+),(\d+)>/i  
  3.      return [$1,$2.to_f]
  4.     end
  5.   end
复制代码

点评

先把这个学完 https://rpg.blue/thread-398047-1-1.html  发表于 2020-5-11 17:05
K佬都是去哪学的?有没有网站可以分享一下><  发表于 2020-5-11 02:46
学  发表于 2020-5-10 19:08
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部