Project1

标题: 关于自定义模块的问题 [打印本页]

作者: hitlerson    时间: 2008-4-23 04:08
标题: 关于自定义模块的问题
module Work
  class Work
    def name
      name = @work.split(/@/)[0]            #0>名称
      return name != nil ? name : ''
    end
   end
end

自己写的module,这样好象会出错
写成def self.name , 也不能和class item那些一样,用item.name 直接调用
work的值传不过去,要怎么写呢? [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 水迭澜    时间: 2008-4-23 04:10
你打算写什么?

作者: hitlerson    时间: 2008-4-23 04:27
先想实现能和ITEM一样,自己建立个物品的模型,然后定义方法

上面写的那个是我以前做的任务,想也做成模型,能到处调用的


作者: 水迭澜    时间: 2008-4-23 04:29
……物品跟这个东西有关系吗……
其实你可以直接把module去掉,MS也没什么区别……汗……
还有就是你出错的信息是什么……我觉得你这段脚本单独放出来可以出N多错误……
作者: 水迭澜    时间: 2008-4-23 04:34
在下愚钝……什么叫做成模型……?
作者: hitlerson    时间: 2008-4-23 04:44
可怜俺个新手,连个事儿都说不清楚

比如吧,我要做个任务的系统,存在一个数组里$TASK,$TASK[0] = 任务名,任务信息
那我要读取任务名就要写$TASK[0].split(/,/)[0]
任务列表,详细说明页面等等都要这么写很麻烦也不直观
想用一个def name 直接定义,以后只要$TASK.name 就好了
作者: hitlerson    时间: 2008-4-23 04:49
module NUM
  NUM = 10
end

常数的话不是能用这个来调用的吗?  num = NUM::NUM
俺现在也只会定义几个常数
module RPG , class Item 看了F1说是内部定义的,我也想自己定义一个
作者: 水迭澜    时间: 2008-4-23 04:52
……数组有spilt这个东西么……我记得是sting里的……蹲墙
拜托给出出错信息吧orz
作者: hitlerson    时间: 2008-4-23 04:56
class Window_WorkList
  def list
    work = $WORK[1]
    workname = work.name
    p workname
  end
end

module Work
  class Work
    def name
      name = @work.split(/@/)[0]            #0>名称
      return name != nil ? name : ''
    end
  end
end

undefinde method 'name' for #<String:0x3e9e668>
作者: 水迭澜    时间: 2008-4-23 04:57
@work没有初始化
另外array不能用spilt
作者: 水迭澜    时间: 2008-4-23 05:07
你的@work没有初始定义
那个def name脚本没有出错的原因是它是在默认已经存在的脚本基础上追加的
你直接就新来个类,然后调用没有初始化的变量当然不行了……
作者: hitlerson    时间: 2008-4-23 05:10
所以我想自己也写个,不知道怎么搞哈
看F1里面他是写成
module RPG
  class Item
    def initialize
      @name = ""
    end
  attr_accessor :name
  end
end

不知道是不是这样就行了
作者: 水迭澜    时间: 2008-4-23 05:11
应该可以吧…… [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: hitlerson    时间: 2008-4-23 05:13
attr_accessor :name是什么意思拉?
定义全局的话,不是很多全局变量,而且也不用$name 调用
作者: 水迭澜    时间: 2008-4-23 05:28
那个是设置为公开变量,也就是说你以后可以在外部操作name~
如果不这样的话,你在这个class以外调用这个变量会出错……
作者: hitlerson    时间: 2008-4-23 06:00
哦,了解,就是传说中的public

module Work
class Work
   def initialize
     @name = ""
   end
  attr_accessor :name

  def name
    name = @work.split(/@/)[0]            #0>名称
    return name != nil ? name : ''
  end
end
end

class Window_WorkList
def list
   work = $WORK[1]
   workname = work.name
   p workname
end
end

不过光这样还是行的吧?还要做点什么呢?还是提示name没有定义,怎么和work关联起来?
作者: hitlerson    时间: 2009-6-12 08:00
数组每个值都是个字符串啊,所以我用SPLIT分割他
因为有这样的脚本
module RPG
  class Item
    def name
      name = @name.split(/,/)[0]
      return name != nil ? name : ""
    end
  end
end

class Window_ItemList
  def list
    item = $data_items[1]
    itemname = item.name
    p itemname
  end
end

这样的脚本是没有错的,我也想实现这样的效果

就是所有页面都能调用.name的方法

RPG,ITEM这写个都是内部定义过的,所以行,这里的module只是重定义了下,那我要写个WORK的话,怎么定义呢




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