2007-12-08
一段小程序(Perl vs. Ruby)
读《Perl语言入门》(第四版,我买的书,网上有个翻译质量很高的电子版)的第10章的习题,人见人爱的猜数游戏,用perl写出来大概这样:
python 代码
- $num=int (1 + rand 100);
- print "I have a number,guess it?:\n";
- while(<>)
- {
- chomp;
- next unless /\d+/;
- $_>$num? print "Too high\n" :
- $_==$num? last :print "Too low\n";
- }
题外话:玩Perl的高人们别鄙视我,我是perl新手啊,如果写的不够“perl”,多多指点。
这段代码转成ruby,可以这样写:
ruby 代码
- $num=1+ (rand 100)
- puts "I have a number guess it?"
- while(true)
- gets.chomp
- next unless ~/\d+/
- $_.to_i>$num?begin print "Too high\n" end:
- $_.to_i==$num? begin break end:begin print "Too low\n" end
- end
看出来了吧,两者何其相似啊,包括perl里面人见人爱的$_,ruby也是支持的,唯一那么一点不同的地方就是last换成了break,然后是正则表达式左边多了个~,你完全可以将这个符号去掉,不过会有警告,最后就是Ruby中的要执行的表达式得放在begin...end里面,这一点让我琢磨了一段时间,还以为Ruby不支持呢。读《Perl语言入门》最大的乐趣除了妙趣横生的语言、古灵精怪的符号之外,就是寻找Ruby中的Perl痕迹,哦哦,那个味道相当重——骆驼的味道。不过现在Ruby不鼓励这样的写法,毕竟,程序是给人读的,因此可以改写一下:
ruby 代码
- $num=1+ (rand 100)
- puts "I have a number guess it?"
- while(true)
- guess=STDIN.gets
- next unless guess=~/\d+/
- if(guess.to_i>$num)
- puts "Too high"
- elsif(guess.to_i==$num)
- break
- else
- puts "Too low"
- end
- end
- 17:17
- 浏览 (500)
- 评论 (0)
- 分类: ruby & rails
- 相关推荐
发表评论
我的留言簿
-
你好,看过你关于自定义classloader的回帖,想问问几个问题:
  ...
-- by llp20_2000
最近加入圈子
最新评论
-
Ruby Tip——读文件
花花公子 写道IO.read("test.log")嗯,这个方法我是知道的,我前 ...
-- by dennis_zane -
Ruby Tip——读文件
IO.read("test.log")
-- by 花花公子 -
一封邮件
咋我没收到呢....
-- by yangzhihuan -
漂亮的代码
说得比较深.看的时候,觉得句句都正中心坎.看完之后,好像没啥收获.还是要自己试过 ...
-- by yangzhihuan -
广州opensource camp小记
貌似你那件open source camp的T-shirt背后很多广告滴说.
-- by yangzhihuan







评论排行榜