C/C++/C#/Java程序员的Ruby第三天

来源:互联网 发布:dag 软件 编辑:程序博客网 时间:2024/05/06 08:43

这第三天依然是不顺。难道老天爷不喜欢Rudy,还是老天爷不喜欢我学Ruby,难道我学Ruby会阻止2012的到来。


今天九点上来准备码第三天。一半时,Win7的Internet访问图标上亮起了一枚划着了的火柴头。靠,internet居然断掉了。暴雨的缘故?操起电话,962525,居然给我报超过150在等待人工服务。靠,我不是那么好骗的,我才不信邪呢。按2故障申告。“话务员全忙,按#号继续等待”,按#号再继续等...... “话务员全忙,请稍后再拨。” 然后直接给我断掉。又试了两次,居然是同样效果。


这难不倒我。我有电信的3G卡。幸好,前段时间在易讯上入手华为EC5805 — cdma2000无线数字终端,用来配我的板子。迅速从手机中取出UIM塞入EC5805,开机。我的板子反应很快,LP的韩剧 — 女人的什么香气可以接着放了。可我的台式机怎么和EC5805连上呢?用配的USB线接通EC5805和我的电脑。出来个USB-KEY DIAL的东东。鸟,这是个啥。二手的说明书也没有。LP有不让我用板子google一把。试着重建一个能接入Internet的网络,最后居然然我输入用户名和密码,试着蒙了个3G上网的用户和密码,一点确定,居然还是走的PPPOE到局端去验证。悲催,失败!MD,是不是啥都不用做就能连Internet。试了试,还是不行。邪乎!


这也难不倒我,我台式机的主板可是P5E3 Premium 带 WiFi-AP。主板后面接上天线,就可以用WiFi连上EC5805了。最后终于成了。期间还是遇到些渣渣问题,什么BIOS里WiFi没打开啦,找不到华硕的WiFI-AP驱动啦,两个无线天线口分不清哪个是哪个啦,重新设置EC5805的MAC地址访问限制超出10个啦。 最后......


冥冥中,明明德,于是有了这第三天。


Reading and 'Riting (文件读/写)

学过C的这下高兴了。

printf( "Number: %5.2f, \nString: %s\n", 1.234455, "hello")

Ruby同Perl的 $_划清界限。

Perl中gets方法的一个副作用是当gets读取一行时,把这行也保存到全局变量$_中。如果不带任何参数地调用print,就会打印出$_中的内容。早期的,Ruby就同perl一样,也允许这种雷同。但现在不建议这么做了。因为Ruby教中完美主义者对上面的做法相当的不爽。符合现代Ruby风格的是用迭代器和预定义对象ARGF去处理。ARGF表示程序的输入文件。我们来比较一下。

旧Ruby风格:

while gets

   if /Ruby/

      print

   end

end

现代Ruby风格:

ARGF.each { |line| print line if line =~ /Ruby/ }

或者

ARGF.grep(/Ruby)

总的来说,现在的Ruby社区正在逐渐脱离某些Perl主义的风格。用 -w 选项运行程序能够显示出更多这类警告信息。


第三章了,终于!

定义类

class Song

   def initialize( name, artist, duration )

      @name = name

      @artist = artist

      @duration = duration

   end

end

① initialize是Song这个类的对象构造函数。当调用Song.new创建一个Song的对象时,再最后Ruby会调用这个initialize方法。

②at符打头的变量都是Song类实例中的变量。

song.inspect:就song这个对象来说,调用这个方法会打印出song对象的ID和每个实例变量的值。以后可以试一试inspect这个方法,看看还有什么惊奇发现没!

song.to_s  --->  "#<Song: 0x1c8ce4>"


继承和消息

class KaraokeSong < Song

  def initialize( name, artist, duration, lyrics )

    super( name, artist, duration )

    @lyrics = lyrics

  end

end

这个应该不用在多说了。

对于子类对父类的方法重载也不用多说了。Ruby先看当前对象的类有无定义该方法,有则调用之;无看父类有无定义该方法,有则调用之;如此这般追溯整个祖先链,如果到最顶层都无该方法的定义,Ruby就报错。


Ruby的类只能有一个父类。从这一点上说Ruby是单继承的。不过,Ruby类可以从任何数量的mixin(类似于一种部分的类定义)中引入(include)功能。这提供了可控的、类似多继承的能力,而没有多继承的缺点。暂且点到为止,我们后面再说。


对象属性

class Song

  attr_reader :name, :artist, :duration

  attr_writer :duration

end

其中与属性相对应的实例变量@name, @artist和@duration会被自动创建。


看完了没码完,休息休息,明日在码。

历时3小时。第四天,32页,虚拟属性(Virtual Attributes)

原创粉丝点击