设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3251|回复: 6
打印 上一主题 下一主题

[已经解决] def的问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1388
在线时间
343 小时
注册时间
2016-7-17
帖子
132
跳转到指定楼层
1
发表于 2020-5-8 22:05:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

有没有办法使用输入值当做方法去引用呢?引用的类会分别使用不同名子的方法,主要如下,或者有没有更简单的写法
RUBY 代码复制
  1. def equips_effict(ability)
  2.          n = {}
  3.      case ability
  4.      when "death"
  5.        #獲取敵方死亡發動的能力
  6.      equip_slots.size.times do |i|           
  7.       if @equips[i] != nil   
  8.        value = @equips[i].death
  9.        if n.has_key?(value[0])
  10.        n[value[0]] += value[1]
  11.      else
  12.        n[value[0]] = value[1]
  13.      end
  14.    end
  15.     add_ability(n)
  16.      end
  17.           when "install_cost"
  18.        #獲取敵方死亡發動的能力
  19.  
  20.      equip_slots.size.times do |i|   
  21.        if @equips[i] != nil
  22.  
  23.        value = @equips[i].install_cost
  24.          puts "value為#{value}"
  25.          if value != nil
  26.        if n.has_key?(value[0])
  27.        n[value[0]] += value[1]
  28.      else
  29.        n[value[0]] = value[1]
  30.      end
  31.      end
  32.      end
  33.      puts "install_cost為#{n}"
  34.       add_ability(n)
  35.      end
  36.                when "atk_settle"
  37.        #獲取敵方死亡發動的能力
  38.      equip_slots.size.times do |i|
  39.        if @equips[i] != nil
  40.        value = @equips[i].atk_settle
  41.         if value != nil
  42.        if n.has_key?(value[0])
  43.        n[value[0]] += value[1]
  44.      else
  45.        n[value[0]] = value[1]
  46.      end
  47.      end
  48.      end
  49.      end
  50.      puts "atk_settle為#{n}"
  51.         #增加能力
  52.         add_ability(n)
  53.       end
  54.       end

这三个判断只差在@equips.方法名上,能不能写成一个就好

Lv4.逐梦者

梦石
0
星屑
11352
在线时间
611 小时
注册时间
2016-8-25
帖子
1400

R考场第七期纪念奖

2
发表于 2020-5-8 22:51:23 | 只看该作者
更简单的写法吗

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

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39587
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

3
发表于 2020-5-9 00:30:38 | 只看该作者
RUBY 代码复制
  1. def equips_effict(ability)
  2.   n = {}
  3.   equip_slots.each do |e|
  4.     next unless e
  5.     value = e.__send__(ability)
  6.     n[value[0]] = (n[value[0]] || 0) + value[1]
  7.   end
  8.   add_ability(n)
  9. end


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

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

评分

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

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1388
在线时间
343 小时
注册时间
2016-7-17
帖子
132
4
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 09:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表