找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3801|回复: 6

[其他] ruby 怎么禁止重载方法?

[复制链接]
发表于 2009-11-6 17:29:29 | 显示全部楼层 |阅读模式
RT...

class A
  def a
     print 1
  end
end

class A
  def a
    print 2
  end
end
方法换了。。。

怎么禁止重载

另外 怎么禁止 alias
上面那个
class A
alias old_a a
  def a
    old_a
    print 222
  end
end

def a又换了。。。。

还有怎么禁止 之后增加的任意方法和实例变量 类变量??

对了对了

还有怎么禁止 以后增加的任意 类 方法  模块  统统禁止掉。。。
 楼主| 发表于 2009-11-6 17:32:25 | 显示全部楼层
说简单点。。就是我写的代码
UUUU
UUUU
UUUU
XXXX
XXXX
XXXX
YYYY
YYYY
YYYY
ZZZZ
ZZZZ
只有 UUUU   YYYY能执行,其他的地方 无论什么玩意都无效。。。能行么? 其他地方不搞成注释。。。
发表于 2009-11-6 19:22:13 | 显示全部楼层
好像ruby不能用final,不知道有什么其他迂回的办法。
发表于 2009-11-6 19:25:42 | 显示全部楼层
狗到一篇文章,可以自己实现final,让方法不会被重载。
http://www.thesorensens.org/2006 ... nt-method-override/
 楼主| 发表于 2009-11-6 20:16:45 | 显示全部楼层
3Q!我去看看,我怎么就搜不到。。。
发表于 2009-11-8 21:20:58 | 显示全部楼层
话说你要不想让类上的方法有变化的话只要freeze一下就好了 = =
  1. irb(main):001:0> class Foo
  2. irb(main):002:1>   def bar
  3. irb(main):003:2>     puts 1
  4. irb(main):004:2>   end
  5. irb(main):005:1> end
  6. => nil
  7. irb(main):006:0> Foo.freeze
  8. => Foo
  9. irb(main):007:0> Foo.new.bar
  10. 1
  11. => nil
  12. irb(main):008:0> class Foo
  13. irb(main):009:1>   def bar
  14. irb(main):010:2>     puts 2
  15. irb(main):011:2>   end
  16. irb(main):012:1> end
  17. TypeError: can't modify frozen class
  18.         from (irb):9
  19.         from :0
复制代码
每次lw跑到我的blog去看的时候我就会想起到幻森转转 orz
 楼主| 发表于 2009-11-8 21:47:43 | 显示全部楼层
我搜索的时候。。有人freeze说不好用我就没实验。。OTL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|幻想森林

GMT+8, 2026-11-2 01:17 , Processed in 0.013462 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表