Project1
标题: 这是我代码写错了还是? [打印本页]
作者: SailCat 时间: 2017-12-2 23:28
标题: 这是我代码写错了还是?
不想连写20条重复的内容,想把1简化成2,结果死活通不过……
是xp ruby版本太低了还是我写错了……
#==============================================================================[/font]
[font="]# ■ Vocab[/font]
[font="]#------------------------------------------------------------------------------[/font]
[font="]# 所有用语的整合模块。[/font]
[font="]#==============================================================================[/font]
[font="]module Vocab[/font]
[font="]#--------------------------------------------------------------------------[/font]
[font="]# ● 导入已经在数据库里定义的术语[/font]
[font="]#--------------------------------------------------------------------------[/font]
[font="]def self.gold; $data_system.words.gold; end[/font]
def self.hp; $data_system.words.hp; end
def self.sp; $data_system.words.sp; end
....
[font="]end
#==============================================================================[/font]
[font="]# ■ Vocab[/font]
[font="]#------------------------------------------------------------------------------[/font]
[font="]# 所有用语的整合模块。[/font]
[font="]#==============================================================================[/font]
[font="]module Vocab[/font]
[font="]#--------------------------------------------------------------------------[/font]
[font="]# ● 导入已经在数据库里定义的术语[/font]
[font="]#--------------------------------------------------------------------------[/font]
[font="]def self.gold; $data_system.words.gold; end[/font]
def self.hp; $data_system.words.hp; end
def self.sp; $data_system.words.sp; end
....
[font="]end
#==============================================================================
# ■ Vocab
#------------------------------------------------------------------------------
# 所有用语的整合模块。
#==============================================================================
module Vocab
#--------------------------------------------------------------------------
# ● 导入已经在数据库里定义的术语
#--------------------------------------------------------------------------
def self.words(sym); $data_system.words.send(sym); end
[:gold, :hp, :sp, :str, :dex, :agi, :int, :atk, :pdef, :mdef,
:weapon, :armor1, :armor2, :armor3, :armor4,
:attack, :skill, :defend, :item, :equip].each do |sym|
self.send :define_method, sym {words(sym)}
end
end
#==============================================================================
# ■ Vocab
#------------------------------------------------------------------------------
# 所有用语的整合模块。
#==============================================================================
module Vocab
#--------------------------------------------------------------------------
# ● 导入已经在数据库里定义的术语
#--------------------------------------------------------------------------
def self.words(sym); $data_system.words.send(sym); end
[:gold, :hp, :sp, :str, :dex, :agi, :int, :atk, :pdef, :mdef,
:weapon, :armor1, :armor2, :armor3, :armor4,
:attack, :skill, :defend, :item, :equip].each do |sym|
self.send :define_method, sym {words(sym)}
end
end
作者: chd114 时间: 2017-12-2 23:48
本帖最后由 chd114 于 2017-12-2 23:49 编辑
- %w(gold hp mp str dex).each do |type| eval %{
- def self.#{type}; $data_system.words.#{type};}end
复制代码
这样如何···
作者: SixRC 时间: 2017-12-3 00:56
本帖最后由 SixRC 于 2017-12-3 01:02 编辑
十四行 {} 改成 do ... end 就可以的
或者用括号把 sym 括起来
原因应该是 方法的优先度高于变量..不加括号解释器认为 sym 是方法
作者: RaidenInfinity 时间: 2017-12-3 01:07
本帖最后由 RaidenInfinity 于 2017-12-3 01:08 编辑
以下代码于Steam正版RMXP空工程内测试可用(包括实际调用):
module Vocab
class << self
WORD_SYM = [:gold, :hp, :sp, :str, :dex, :agi, :int, :atk, :pdef, :mdef,
:weapon, :armor1, :armor2, :armor3, :armor4,
:attack, :skill, :guard, :item, :equip]
WORD_SYM.each do |sym|
target = RPG::System::Words.instance_method(sym)
define_method(sym) do
target.bind($data_system.words).call
end
end
end
end
module Vocab
class << self
WORD_SYM = [:gold, :hp, :sp, :str, :dex, :agi, :int, :atk, :pdef, :mdef,
:weapon, :armor1, :armor2, :armor3, :armor4,
:attack, :skill, :guard, :item, :equip]
WORD_SYM.each do |sym|
target = RPG::System::Words.instance_method(sym)
define_method(sym) do
target.bind($data_system.words).call
end
end
end
end
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |