男人眼泪中的Ruby(二)

等待今天宿舍的小八提出来要考 DBA ,这个勾起了我的思绪。To be a DBA or to be a Programmer it's a questions。其实我个人比较倾向去做程序设计,可是综合考虑到我的性格,感觉自己做DBA更合适一点。下午看了一下 Oracle Certified Administrator (OCA)的书,感觉没有想象中的难,大多是数据库的维护。可能唯一让人感觉到难得是要求回到可爱的linux下面(不是必须的),不过还好我有些linux基础。大家有没有做数据库的给我联系一下,有些问题想请教。

这几天忙着锻炼身体和找些小说调整心理,所以没有在第一时间写ruby系列,希望大家原谅。还好现在我的心态好些了。想起了小时候玩的《仙剑奇侠传》里面的诗,现在感觉其实还挺好的。

既不回头,何必不忘。
既然无缘,何须誓言。
今日种种,似水无痕。
明夕何夕,君已陌路。

言归正传,下面来看看在 Ruby 里面如何来定义一个类呢:

class MyClass
end

ob=MyClass.new

上面就是建立一个类并且初始化一个MyClass的类的实例ob,语法相当简单的,其实个人还是比较喜欢在new后面加上(),主要是害怕多了眼晕。实际上即使咱们创建的MyClass是一个空类,但是也不见他是真的 Poor  empty。他还有从Object对象继承下来的属性和方法啊。这里也就引入了ruby的类层次模型,所有的类都是从Object继承下来的,这点还是和大部分面向对象语言一样的。谢谢他一个比较好玩的方法,就是Class.class方法,告诉别人自己是什么类。看看下面的代码:

puts ob.class
#=>displays "MyClass"

用class方法可以输出ob的类名,感觉这个在特定的场合还是有一定用处的。下面让我们类有些用处,不要只会跟他爹说自己的名字,也要会说些其他的东西。

class MyClass
  def saysomething
    puts("Hello")
  end
end

ob=MyClass.new
ob.saysomething

这样就完成一个有用的类的实例化和调用了。感觉对ruby的类调用明晰点了吧。下面让类更活泼一点,除了会说,还要会学,能够自己接受写什么东西,当然还都是函数喽。

class Bird
  def set_name(aName)
    @myname=aName
  end
  def get_name
    return @myname
  end
  def talk
    return 'GiGi'
  end
end

bluebird=Bird.new
redbird=Bird.new

bluebird.set_name('bluebird')
redbird.set_name('redbird')

puts(bluebird.get_name)
puts(redbird.get_name)

puts(bluebird.talk)
puts(redbird.talk)

这个就是对类的一个基本的初级综合应用了,模拟了一个Bird的动作。不过感觉每次都这样在初始化一个类之后在用class.set_name()函数是不是很麻烦,可不可以直接用class()来做啊。这里就引出了下面的主角 Constructors 了。对于对象的初始化函数,在C#之类的都是和类名同名的函数,不过在ruby里面就不一样了,有一个专门的函数名字来对应 initialize()。下面看看代码更好理解:

 

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

superman=Man.new('jesse',21)
puts(superman.get_name)
puts(superman.get_age)
puts(superman.to_s)

这里面的代码展示了initialize()这个构造函数的使用方法,后面还提到了函数的重载。我重载了to_S函数,来实现自己所谓的toString,感觉更好点。其实有时候感觉动态语言真正的牛逼在于它的动态,反映在反射机制上面了,下面通过一角,看看ruby的反射。输入下面代码

superman.inspect
p(superman)
看到了下面的这个内容

#<Man:0x28bdb64 @age=21, @name="jesse">
nil

inspect就是ruby对象的自省函数啦。这里的superman是一个Man类型的实例,后面的数字是ruby虚拟机用的对象标识符。@age和@name都是这个对象实例的值。这里你可以想到什么,自己考虑吧。明天在写了,继续努力...

 
 
 

posted on 2007-03-13 23:11  JesseZhao  阅读(2413)  评论(12编辑  收藏  举报

导航