查看: 2170|回复: 11

[有事请教] 这是我代码写错了还是?

[复制链接]

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

发表于 2017-12-2 23:28:03 | 显示全部楼层 |阅读模式

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

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

×
不想连写20条重复的内容,想把1简化成2,结果死活通不过……

是xp ruby版本太低了还是我写错了……

[pre lang="ruby"]#==============================================================================
# ■ Vocab
#------------------------------------------------------------------------------
# 所有用语的整合模块。
#==============================================================================
module Vocab
#--------------------------------------------------------------------------
# ● 导入已经在数据库里定义的术语
#--------------------------------------------------------------------------
def self.gold; $data_system.words.gold; end
def self.hp; $data_system.words.hp; end
def self.sp; $data_system.words.sp; end
....
end[/pre]

[pre lang="ruby"]#==============================================================================
# ■ 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[/pre]
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2017-12-2 23:48:20 | 显示全部楼层
本帖最后由 chd114 于 2017-12-2 23:49 编辑
  1. %w(gold hp mp str dex).each do |type| eval %{
  2. def self.#{type}; $data_system.words.#{type};}end
复制代码

这样如何···

点评

不知道···不过你send(sym)的话进去的内容好像是:gold吧···把读取出来的:gold的:去掉也试过了吗?我觉得去掉的话应该可以  发表于 2017-12-3 00:37
↓这怎么能用Method_missing...  发表于 2017-12-3 00:34
method_missing?  发表于 2017-12-3 00:10
难道除了Eval大法之外就毫无办法了么……  发表于 2017-12-3 00:02
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
回帖
705

R考场第七期纪念奖

发表于 2017-12-3 00:56:33 | 显示全部楼层
本帖最后由 SixRC 于 2017-12-3 01:02 编辑

十四行 {} 改成 do ... end 就可以的
或者用括号把 sym 括起来
原因应该是 方法的优先度高于变量..不加括号解释器认为 sym 是方法

点评

原来如此  发表于 2017-12-3 12:00
变量的优先度高于方法,但后面跟个 { } 就不一样了  发表于 2017-12-3 09:00

评分

参与人数 1赞 +1 收起 理由
SailCat + 1 {}和do end居然不一样……

查看全部评分

回复

使用道具 举报

梦石
0
星屑
6891
在线时间
7027 小时
注册时间
2013-11-2
回帖
1263

开拓者剧作品鉴家

发表于 2017-12-3 01:07:08 | 显示全部楼层
本帖最后由 RaidenInfinity 于 2017-12-3 01:08 编辑

以下代码于Steam正版RMXP空工程内测试可用(包括实际调用):
[pre lang="ruby"]
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
[/pre]

点评

Steam英文正版的RGSS104E.dll,p RUBY_VERSION 输出的是 "1.8.1"。  发表于 2017-12-3 01:21
这……RMXP1.05莫非是ruby 1.8.6了……  发表于 2017-12-3 01:17

评分

参与人数 1赞 +1 收起 理由
SailCat + 1 我很赞同

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部