secondsen 发表于 2009-11-6 17:29:29

ruby 怎么禁止重载方法?

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又换了。。。。

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

对了对了

还有怎么禁止 以后增加的任意 类 方法模块统统禁止掉。。。

secondsen 发表于 2009-11-6 17:32:25

说简单点。。就是我写的代码
UUUU
UUUU
UUUU
XXXX
XXXX
XXXX
YYYY
YYYY
YYYY
ZZZZ
ZZZZ
只有 UUUU   YYYY能执行,其他的地方 无论什么玩意都无效。。。能行么? 其他地方不搞成注释。。。

shawind 发表于 2009-11-6 19:22:13

好像ruby不能用final,不知道有什么其他迂回的办法。

shawind 发表于 2009-11-6 19:25:42

狗到一篇文章,可以自己实现final,让方法不会被重载。
http://www.thesorensens.org/2006/10/06/final-methods-in-ruby-prevent-method-override/

secondsen 发表于 2009-11-6 20:16:45

3Q!我去看看,我怎么就搜不到。。。

rednaxela 发表于 2009-11-8 21:20:58

话说你要不想让类上的方法有变化的话只要freeze一下就好了 = =
irb(main):001:0> class Foo
irb(main):002:1>   def bar
irb(main):003:2>   puts 1
irb(main):004:2>   end
irb(main):005:1> end
=> nil
irb(main):006:0> Foo.freeze
=> Foo
irb(main):007:0> Foo.new.bar
1
=> nil
irb(main):008:0> class Foo
irb(main):009:1>   def bar
irb(main):010:2>   puts 2
irb(main):011:2>   end
irb(main):012:1> end
TypeError: can't modify frozen class
      from (irb):9
      from :0
每次lw跑到我的blog去看的时候我就会想起到幻森转转 orz

secondsen 发表于 2009-11-8 21:47:43

我搜索的时候。。有人freeze说不好用我就没实验。。OTL
页: [1]
查看完整版本: ruby 怎么禁止重载方法?