Ruby Practice – Dynamicity

Ruby是一种动态的语言,下面的几个例子将展示Ruby的动态特性。

先看第一个例子:

$ irb
irb(main):001:0> class Hello
irb(main):002:1> end
=> nil
irb(main):003:0> hello = Hello.new
=> #<Hello:0xb7f36cb4>
irb(main):004:0> hello.hi
NoMethodError: undefined method `hi' for #<Hello:0xb7f36cb4>
        from (irb):4
        from :0
irb(main):005:0> class Hello
irb(main):006:1>   def hi
irb(main):007:2>     puts "hello, world"
irb(main):008:2>   end
irb(main):009:1> end
=> nil
irb(main):010:0> hello.hi
hello, world
=> nil

在这个例子中,我们先定义一个“空”的Hello类,所以,当我们对它的实例hello调用hi方法时会报错。接着,我们把一个hi方法的定义塞进Hello类里面,然后再调用hi。这个例子说明,Ruby的类很像C++中的名字空间,我们可以随时打开它的作用域,向里面加点东西,然后再关闭它。不过,在Ruby里,我们可以做更多的事,比如:

irb(main):011:0> class Hello
irb(main):012:1>   private :hi
irb(main):013:1> end
=> Hello
irb(main):014:0> hello.hi
NoMethodError: private method `hi' called for #<Hello:0xb7f36cb4>
        from (irb):14
        from :0

虽然hi方法还在,但是已经不能通过hello来调用它了,因为它已经变成一个私有的方法。不过,我们仍然可以在类里面调用它。

irb(main):015:0> class Hello
irb(main):016:1>   def bye
irb(main):017:2>     hi
irb(main):018:2>   end
irb(main):019:1> end
=> nil
irb(main):020:0> hello.bye
hello, world
=> nil

接下来的事情更令人惊讶:

irb(main):021:0> class Hello
irb(main):022:1>   undef bye
irb(main):023:1> end
=> nil
irb(main):024:0> hello.bye
NoMethodError: undefined method `bye' for #<Hello:0xb7f36cb4>
        from (irb):24
        from :0

我们甚至删除了一个方法!更要命的是,我们不仅可以对自己写的类做这样的事,还可以对Ruby的标准类做同样的事。说实话,我还是第一次接触拥有这种特性的语言,想象不出它有怎样的用处(正面的),尤其是删除一个方法。虽然我愿意抱着开放的心态接受这种特性,但是我相信,它会让很多经理们疯狂,他们绝不愿意把这样一种语言用在他们的项目里。那么,究竟是怎样的一群人在使用Ruby呢?

Work for fun

不知道该称为忙里偷闲还是闲里偷忙,总之,做了一个星期自己想做的事。

很少有像这一周这么累过,每天下班后感觉大脑就像一块砖头,没法像以前一样看看书,学点啥;中午看blog也都匆匆忙忙,有时甚至就不看了,更别提写blog了。做自己想做的事很有劲头,一头扎下去,抬起头来的时候就到了下班的时间。这种感觉很久都没有了,甚至可能从来都没有过。

很踏实,也很累。这样下去估计撑不了多久,所以,打算下周还是做些日常工作,偷懒也好,尽责也好,总之,劳逸结合嘛!说来好笑,最有成效的一周,可能会被认为不务正业,平时尽管闲着,却也算尽职尽责,有时甚至觉得,自己将随着这个项目一起,被丢进历史的垃圾堆,所以,当听说这个项目前途未卜时,反到有一丝兴奋。更讽刺的是,越是这种时候,一些应该做的事,才有可能做成,毕竟,一个没有明天的项目,人们也懒得阻挠来反对去的,随你怎么去“糟蹋”。

这一周网上最有趣的事,是有人对几位著名的程序员做了一次采访被采访者之一也谈了自己的感想,值得一读。