在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
今天原本平稳的心情被一些事情所触动,深埋的东西被拔起的感觉总是痛痛的,不提太多了,还是专心写文章吧。说说今天这篇文章的关键字,看看有没有你能有用的: Class Hierarchies ,Accessors,Attributes,Class Variables。说白了今天就是Deep in Ruby Class了,不过这个 Deep 不够 Deep,只是在我个人的肤浅之上的Deep。 仔细说说,看完了Ruby的语法书,发现了ruby居然没有提供接口这个语法,而是用一个Module来取代了,这也就是说Ruby没有实现多继承,也就是只能有一个父类,然后可以有多个子类。Only one SuperClass and many Subclass。下面看看Ruby类面类继承的语法: class Man def initialize(aName,aAge) @name=aName @age=aAge end def get_name return @name end def get_age return @age end def to_s return 'Good!!!' end end class SuperMan<Man def initialize(aName,aAge,aPower) super(aName,aAge) @power=aPower end def get_power return @power end def set_power return @power end end supermanABC=SuperMan.new('Jesse',21,100) puts (supermanABC.get_power) puts(supermanABC.inspect)
这个里面我们可以看到从类继承的语法就是一个<符号,很简洁。看了代码总是很清晰,只需要点一下就是那个super()访问超类,也就是subclass 调用superclass的构造函数了。 我们在写ruby的class的属性的时候如果总是写get_power和set_power这样的函数,对这个属性操作的时候还都是要class.get_power之类感觉很麻烦,我们能不能把它整成直接这样访问 class.power=x,那样不是很爽啊。下面看看代码,了解一下ruby的accessor方法: class SuperMan<Man def initialize(aName,aAge,aPower) super(aName,aAge) @power=aPower end def power return @power end def power=(aPower) @power=aPower end end supermanABC=SuperMan.new('Jesse',21,100) supermanABC.power=98 puts (supermanABC.power) puts(supermanABC.inspect)
改造了一下上面的SuperMan类,然后定义了power的accessor,很明显语法,不用抽出来讲了。不过感觉对于每个属性如果还是这样写的话也是比较麻烦,继续简化,整出下一个主角 Attribute Reader和Writer标签。看看下面的代码: class SuperMan<Man attr_reader:power attr_writer:power def initialize(aName,aAge,aPower) super(aName,aAge) @power=aPower end end
更加简化了吧,其实还可以更加简化,继续给出代码: class SuperMan<Man attr_accessor:power def initialize(aName,aAge,aPower) super(aName,aAge) @power=aPower end end
一个标签就搞定了,其实个人比较推荐上面的attr_reader和attr_writer,因为你可以用def power这种方法的从在方便的对属性进行处理后在返回,看看下面的代码你就有所体会了: class Man attr_writer:name def initialize(aName,aAge) @name=aName @age=aAge end def name return @name.capitalize end end superman=Man.new("jesse",21) puts(superman.name)
这里的@name.capitalize是把这个属性值的首字母大写了输出。感觉这样更灵活一些,在灵活和方便的找到了一个折中。下面来说说Class Variables,这个是在所有的类的实例之间共享的一个变量。下面看看代码: class Man attr_writer:name @@man_name=0 def initialize(aName,aAge) @name=aName @age=aAge @@man_name+=1 end def name return @name.capitalize end def get_man_name return @@man_name end end superman=Man.new("jesse",21) superman1=Man.new("jesse1",22) superman2=Man.new("jesse2",22) puts superman.get_man_name puts superman1.get_man_name puts superman2.get_man_name
class variables的语法为@@varname。程序运行输出的结果都是3,这就说明他们之间是共享的。这个东西在有些地方很有用,大家多考虑考虑。 今天就写到这里吧。明天讲讲 hash 和 array 的内容。顺便说一下我们宿舍的小八也恋爱了,祝福他们。呵呵,不知道怎么搞得,心里突然很失落。也许我的爱情观改变了... PS: 今天看完了《A little book of Ruby》 和 《Ruby on rails:up and running》这两本书,大强度的英语阅读下感觉慢慢的还是可以习惯英文阅读的。今天做个决定,以后技术书籍只要有英文版本尽量去看英文版。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论