Project1

标题: 怎么在不生成实例的情况下调用方法 [打印本页]

作者: zh99998    时间: 2009-8-8 18:17
标题: 怎么在不生成实例的情况下调用方法
RT[line]1[/line]雪流星:版规第XX条不允许发如题帖!![line]1[/line]就是调用在某个类里定义的方法,只用这一个方法,并且不涉及到实例变量,所以没必要生成它的实例(浪费内存并且要执行initialize),比如Scene_File#write_save_data
作者: ★_茄孓    时间: 2009-8-8 19:11
那就把方法写在模块里啊。
作者: 神思    时间: 2009-8-8 19:20
同...
module ORZ
  def done
    p 'done'
  end
  module_function(:done)
end
ORZ.done
作者: zh99998    时间: 2009-8-8 19:44
谢,我居然忘了直接把module_function写进原类里……
嗯……如果不对原类作修改,有办法调用吗
作者: 沉影不器    时间: 2009-8-8 19:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2009-8-8 19:52
首先,是调用一个已经定义好的方法,而不是现定义(否则就没必要调用那个了直接执行就是)
作者: 沉影不器    时间: 2009-8-8 19:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2009-8-8 20:02
怎么在不生成实例的情况下调用方法
只用这一个方法,并且不涉及到实例变量,所以没必要生成它的实例(浪费内存并且要执行initialize)
[line]1[/line]沉影大人好
作者: 沉影不器    时间: 2009-8-8 20:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2009-8-9 09:57
雪流星:版规第XX条不允许发如题帖!!

= =!
你可以寫「謎之音」或「某版主」的..........
至到犯規還用RT
作者: zh99998    时间: 2009-8-9 13:25
a=ORZ.new.method :done

这不就是生成了原类的实例吗
作者: IamI    时间: 2009-8-9 14:07
如果要真·执行的话
XD我只找到instance_method可以拿到一个UnbonudMethod,之后一定要随便绑定一个对象Orz
怨念脚本一段
  1. class A
  2.   def a
  3.     p "a"
  4.   end
  5. end

  6. t = A.instance_method(:a)
  7. p t
复制代码
话说……不能用module_function吗0 0
作者: zh99998    时间: 2009-8-9 14:59
之后一定要随便绑定一个对象
经过我的测试不能随便绑定,只能绑在原类的实例上才行
作者: 沉影不器    时间: 2009-8-10 21:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: ★星な守望者    时间: 2009-8-13 21:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2009-8-15 12:28
ORZ.new应该是为了给方法找个对象而已,或者未生成ORZ实例,或者生成而被GC收回,二者的结果都是只生成method对象...过程不清楚
我一直想说的就是方法必须有对象...所以我也一直认为"如果不对原类作修改,有办法调用吗" ...
沉影不器 发表于 2009-8-10 21:14

意思也就是说,对于一个已经定义好的类,再不对这个类做修改的情况下,调用里面的实例方法就必须生成实例对吗

ORZ.new就是生成那个类的实例了,匿名实例也是实例
作者: 沉影不器    时间: 2009-8-16 18:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2009-8-17 07:46
生成实例要是只耗内存的话也就GC了,但是如果里面定义了很奇怪的initialize……
作者: 华华    时间: 2009-8-17 15:45
应该没办法把实例方法当成静态方法调用吧
作者: 叶子    时间: 2009-8-17 16:09
如果只是要避免某一个类的initialize方法,那么可以新写一个类来继承原来这个类,随便定义一下initialize,然后如IamI所说那样拿到一个UnboundMethod,把这个东西bind到我们新写的类的对象上,然后如沉影不器所说那样执行 0v0

这么做是因为bind方法只认kind_of?
作者: zh99998    时间: 2009-8-17 16:37
多谢楼上几位高人,明白了
作者: 沉影不器    时间: 2009-8-17 21:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: 叶子    时间: 2009-8-18 00:45
用子类继承,好办法哇...我觉得得到UnboundMethod有意义么...为什么不直接得到子类的Method...
沉影不器 发表于 2009-8-17 21:29

貌似是可以直接用子类的方法 0v0




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