Project1

标题: 如何在函数名中加入变量? [打印本页]

作者: 黑白界    时间: 2015-2-28 22:10
标题: 如何在函数名中加入变量?
以应对这样的问题

作者: VIPArcher    时间: 2015-2-28 22:32
  1. def on_item_ok(id)
  2.   create_command(id)
  3.   @commadn.uppos(#........
  4.   #.......
  5. end
复制代码

作者: 黑白界    时间: 2015-2-28 22:35
VIPArcher 发表于 2015-2-28 22:32

这样子在 method(:?)里就不能调用这些函数了。。
作者: 喵呜喵5    时间: 2015-2-28 23:31
本帖最后由 喵呜喵5 于 2015-2-28 23:36 编辑

两种思路,第一种,不使用 method 而是使用 Proc 闭包
  1. xxxx.set_handler( :new_game, Proc.new{ on_item_ok(参数) } )
复制代码
第二种,define_method
  1. class Scene_XXX
  2.   4.times do |i|
  3.     define_method "on_item_ok#{i}" do      
  4.       create_command(i)
  5.       XXXX
  6.     end
  7.   end
  8. end
复制代码

作者: taroxd    时间: 2015-3-1 07:51
比起楼上两种我还是给出朴素一些的做法吧。

RUBY 代码复制
  1. class Scene_XXX
  2.   def on_item_ok(id)
  3.     create_command(id)
  4.     @commadn.uppos(#........
  5.     #.......
  6.   end
  7.  
  8.   def on_item_ok1; on_item_ok 1; end
  9.   def on_item_ok2; on_item_ok 2; end
  10.   # ...
  11.  
  12. end


or

RUBY 代码复制
  1. class Scene_XXX
  2.   def on_item_ok
  3.     create_command(@some_window.index)
  4.     @commadn.uppos(#........
  5.     #.......
  6.   end
  7. end

作者: tan12345    时间: 2015-3-1 10:38
我认为……他存在的问题应该是:怎么会有这么多的on_item_ok?我用的是通过current_symbol来确认指向的是哪个选项,这样就可以使用像2楼那样的方法了,也省下了on_item_ok_id这样的函数命名,只要1个按下ok确认的方法就可以了(当然,提前在选项那里做好add_command(test, handle))。




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