Project1

标题: 【RMVA]】对系统脚本 def object=(item)用法存疑? [打印本页]

作者: alianlord    时间: 2020-7-8 18:41
标题: 【RMVA]】对系统脚本 def object=(item)用法存疑?
#==============================================================================
# ■ Game_BaseItem
#------------------------------------------------------------------------------
#  スキル、アイテム、武器、防具を統一的に扱うクラスです。セーブデータに含める
# ことができるように、データベースオブジェクト自体への参照は保持しません。
#==============================================================================

class Game_BaseItem
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @class = nil
    @item_id = 0
  end
...
...
...
#--------------------------------------------------------------------------
  # ● アイテムオブジェクトの設定
  #--------------------------------------------------------------------------
def object=(item)
    @class = item ? item.class : nil
    @item_id = item ? item.id : 0
  end

红字部份无法完全理解,def object=(item) 中的  item 难道可以同时指定 @class /@item_id 两者?
作者: guoxiaomi    时间: 2020-7-8 18:46
可以啊,因为item是一个对象……拥有多个属性很正常吧,然后这里把item的class和id属性传给了实例变量@class和@item_id。
作者: 百里_飞柳    时间: 2020-7-8 19:13
这其实就是一个方法,只不过做了一点特殊的结构处理
使得它可以被写成 .object = item 这样罢了
如果是
def object(item)
    @class = item ? item.class : nil
    @item_id = item ? item.id : 0
end
就是标准的 .object(item) 的调用方式

作用都是给实例变量赋值
作者: alianlord    时间: 2020-7-8 21:55
不是很明白。能举个实际使用例子吗?
作者: KB.Driver    时间: 2020-7-8 23:39
本帖最后由 KB.Driver 于 2020-7-8 23:45 编辑
alianlord 发表于 2020-7-8 21:55
不是很明白。能举个实际使用例子吗?


我打个不恰当的比方
有一个中国人Person的实例person
我通过调用person.name=和person.name,就能读取与设置名字。


然而它的内部可能是这样的:


也就是说,调用person.name = "xxx"时,并没有操作一个叫@name的实例变量
但是在外部看来,并不关注它内部是如何实现的,只要能让我读写name就可以了

不过不管怎么说,name=都只是一个方法而已
和一般的方法唯一的不同就是它可以用近似赋值语句的方式来写




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