喜欢ruby的几点理由
ruby好多地方借鉴了Perl,但OO实现的比perl好的多~~说几点偶喜欢ruby的地方:
(1)类都是开放式的,很容易扩展。
irb(main):001:0> class String
irb(main):002:1> def myhi
irb(main):003:2> puts "hi my world"
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> x="hello"
=> "hello"
irb(main):007:0> x.myhi
hi my world
=> nil
如上就方便的在String类里扩展了一个myhi方法(实例方法)。
x是String的一个实例,它能访问到这个方法。
(2)单态类(singleton class),很灵活。
任何目标都可定义一个私有方法,它们只属于这个目标自身。
irb(main):008:0> def x.oops
irb(main):009:1> puts "oops it's me"
irb(main):010:1> end
=> nil
irb(main):011:0> x.oops
oops it's me
=> nil
x这个目标(String的实例),可以加载一个oops方法,它只属于x自身。
如下"s"也是String的实例,但它就没有这个方法。
irb(main):012:0> "s".oops
NoMethodError: undefined method `oops' for "s":String
from (irb):12
from /usr/bin/irb:12:in `<main>'
类自身是Class类的实例,所以它也是一个目标,可以定义类私有方法。
irb(main):013:0> class Myclass
irb(main):014:1> end
=> nil
irb(main):015:0> def Myclass.echo
irb(main):016:1> puts "hello world"
irb(main):017:1> end
=> nil
irb(main):018:0> Myclass.echo
hello world
=> nil
当然目标还可以扩充Module里的方法,很好很强大。
irb(main):019:0> module Foo
irb(main):020:1>def greet
irb(main):021:2> puts "Hello, #{self}!"
irb(main):022:2>end
irb(main):023:1> end
=> nil
irb(main):024:0> x.extend Foo
=> "hello"
irb(main):025:0> x.greet
Hello, hello!
(3)block的使用
ruby将block的使用发挥到极致,没有block,ruby无法运行。
block就是代码块,它类似于perl里的匿名函数,或者python里的lambda。
ruby里的函数如此广泛的使用block,正是由于其强大与灵活。
例如数组或hash的delete_if方法和select/find方法等,接受一个block作为参数,从而使得条件刷选如此容易。
如下偶自己定义一个方法,它接受一个hash和一个block,来实现类似hash.find的功能。
irb(main):105:0* def myfunc(a)
irb(main):106:1> newhash=Hash.new
irb(main):107:1> if block_given?
irb(main):108:2> a.each do |k,v| newhash = v if yield k,v end
irb(main):109:2> else
irb(main):110:2* raise "no block was given"
irb(main):111:2> end
irb(main):112:1> newhash
irb(main):113:1> end
=> nil
irb(main):114:0> x
=> {1=>2, 3=>4, 5=>6, 7=>8}
irb(main):116:0> myfunc(x) do |c,d| c>2 end
=> {3=>4, 5=>6, 7=>8} 顶仙子:mrgreen: 不懂啊,太高深了 谢谢dz902的小手~:em03: :em03: 也谢谢大家的友情帮顶啦~~
ruby是门好语言,它的优雅不应该这么冷清~:em03: 很早就发过长篇连载原创了。也帮我顶顶呗。:mrgreen:
我知道一旦有了版主肯定是要加入精华的。:em15: :em15:
http://bbs.chinaunix.net/viewthread.php?tid=979792
http://bbs.chinaunix.net/viewthread.php?tid=976303 不参与语言之争,只会点C和ASM
需要OO思想,但是与语言无关, :shock: ruby的作者是小日本。。。 原帖由 370498196 于 2010-1-6 10:48 发表 http://bbs.chinaunix.net/images/common/back.gif
:shock: ruby的作者是小日本。。。
你可以不学
人生苦短,我用ruby因为它可以帮我节省被浪费的生命 我最喜欢Ruby的闭包实现。
页:
[1]
2