《Ruby元编程》之class关键词

class是个关键词(Keyword)。  但跟java不同的是class并非是定义一种模板,并非类声明(class declaration)。而是一种操作符.

记住:class不是class declaration,而是一种操作符。 这句话理解很关键,否则下面的代码你看不懂:(其实Ruby不应该跟java的class混用同一个名称,@#%…………,让人家理解混淆)。可以简单的是ClassDef。

看下面的代码:

class D
    def x; 'x' ; end
end

class D
  def y; 'y' ; end
end
obj = D.new
obj.x # => "x"
obj.y # => "y"
这里的含有是:

第一个class D是定义一个叫做D的类,然后添加x方法,当第二次class D的时候,首次查找有没有叫做D的类,如果有,不用重新定义了,然后添加y方法。

这种东西在Java中是不允许的。在java中,不能有两个相同的名称,另外一个,不能拆分成两个定义。

在C#中,可以通过定义partial class来将两个同名的class合并为一个。 但本质还是不同的。

而Ruby中,可以重复的使用class D的。这种方式相当于第一次是如果没有D这个东西,首先定义D这个东西,然后在D中添加一些方法。第二次,如果有了D,则不需要再次定义了,直接往D中添加另外方法。

那么class这个关键词本身就相当于ClassDef。

--------------------------------------

再看例子:

3.times do
   class C
      puts "Hello"
   end
end
这个东西在Java中是绝对不能的。在Java中,要使用类C,必须:

C  clz = new C();
clz.sayHello();
而Ruby是可以这样的。

这就很奇怪了,那还需要D.new 这个东西来干嘛?



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值