一段小程序(Perl vs. Ruby)

读《Perl语言入门》(第四版,我买的书,网上有个翻译质量很高的电子版)的第10章的习题,人见人爱的猜数游戏,用perl写出来大概这样:

python 代码
 
  1. $num=int (1 + rand 100);
  2. print "I have a number,guess it?:\n";
  3. while(<>)
  4. {
  5. chomp;
  6. next unless /\d+/;
  7. $_>$num? print "Too high\n" :
  8. $_==$num? last :print "Too low\n";
  9. }

题外话:玩Perl的高人们别鄙视我,我是perl新手啊,如果写的不够“perl”,多多指点。

这段代码转成ruby,可以这样写:

ruby 代码
 
  1. $num=1+ (rand 100)
  2. puts "I have a number guess it?"
  3. while(true)
  4. gets.chomp
  5. next unless ~/\d+/
  6. $_.to_i>$num?begin print "Too high\n" end:
  7. $_.to_i==$num? begin break end:begin print "Too low\n" end
  8. end


看出来了吧,两者何其相似啊,包括perl里面人见人爱的$_,ruby也是支持的,唯一那么一点不同的地方就是last换成了break,然后是正则表达式左边多了个~,你完全可以将这个符号去掉,不过会有警告,最后就是Ruby中的要执行的表达式得放在begin...end里面,这一点让我琢磨了一段时间,还以为Ruby不支持呢。读《Perl语言入门》最大的乐趣除了妙趣横生的语言、古灵精怪的符号之外,就是寻找Ruby中的Perl痕迹,哦哦,那个味道相当重——骆驼的味道。不过现在Ruby不鼓励这样的写法,毕竟,程序是给人读的,因此可以改写一下:

ruby 代码
 
  1. $num=1+ (rand 100)
  2. puts "I have a number guess it?"
  3. while(true)
  4. guess=STDIN.gets
  5. next unless guess=~/\d+/
  6. if(guess.to_i>$num)
  7. puts "Too high"
  8. elsif(guess.to_i==$num)
  9. break
  10. else
  11. puts "Too low"
  12. end
  13. end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值