免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6771 | 回复: 11
打印 上一主题 下一主题

喜欢ruby的几点理由 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-03 21:37 |只看该作者 |倒序浏览
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[k] = 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}

评分

参与人数 1可用积分 +2 收起 理由
dz902 + 2 这些理由是 Ruby 讨人喜欢的地方,也是 ...

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2010-01-03 21:49 |只看该作者
顶仙子

论坛徽章:
0
3 [报告]
发表于 2010-01-03 21:52 |只看该作者
不懂啊,太高深了

论坛徽章:
0
4 [报告]
发表于 2010-01-03 21:53 |只看该作者
谢谢dz902的小手~

评分

参与人数 1可用积分 +2 收起 理由
dz902 + 2 啥时候再对诗=)

查看全部评分

论坛徽章:
0
5 [报告]
发表于 2010-01-03 21:55 |只看该作者
也谢谢大家的友情帮顶啦~~
ruby是门好语言,它的优雅不应该这么冷清~

论坛徽章:
0
6 [报告]
发表于 2010-01-03 21:57 |只看该作者
很早就发过长篇连载原创了。也帮我顶顶呗。

我知道一旦有了版主肯定是要加入精华的。

http://bbs.chinaunix.net/viewthread.php?tid=979792

http://bbs.chinaunix.net/viewthread.php?tid=976303

论坛徽章:
0
7 [报告]
发表于 2010-01-03 22:08 |只看该作者
不参与语言之争,只会点C和ASM

需要OO思想,但是与语言无关,

论坛徽章:
0
8 [报告]
发表于 2010-01-06 10:48 |只看该作者
ruby的作者是小日本。。。

论坛徽章:
0
9 [报告]
发表于 2010-01-11 11:19 |只看该作者
原帖由 370498196 于 2010-1-6 10:48 发表
ruby的作者是小日本。。。


你可以不学
人生苦短,我用ruby因为它可以帮我节省被浪费的生命

论坛徽章:
0
10 [报告]
发表于 2010-01-11 20:04 |只看该作者
我最喜欢Ruby的闭包实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP