`

一段小程序(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
分享到:
评论

相关推荐

    Ruby程序设计(简洁清新的教程)

    代码块是在方法调用时传递的一段可执行代码: ```ruby array = [1, 2, 3] array.each do |item| puts item end ``` **5.2 迭代器** 迭代器提供了一种遍历集合的方法: ```ruby (1..5).each do |i| puts i end ...

    ruby语法基础教程.pdf

    - 代码块是在方法调用时定义的一段代码,可以在方法内部被多次执行。 - 代码块通过`do...end`或`{...}`定义。 **5.2 迭代器(Iterator)** - 迭代器提供了一种遍历集合的方式。 - Ruby提供了多种内置迭代器,如`each`...

    ruby语法基础

    Matz选择了一种宝石——红宝石(Ruby)来命名他的新语言,这不仅是对他一位同事生肖石的致敬,也象征着其作为Perl后续语言的地位。在大小上,Ruby(5.5pt)比Perl(5pt)略大,进一步体现了其对Perl的继承与发展。 ##...

    什么是Ruby之道

    Larry Wall在Perl中的观点同样适用于Ruby:“小型语言产生冗长代码,大型语言产生简洁代码。”语言的复杂性是为了让表达更高效,而不是增加负担。 “Ruby之道”还强调代码的可维护性和可读性,鼓励编写短小精悍的...

    Fred Wu:如何通过努力和一些小聪明,成为一个更优秀的Ruby程序员

    ### 如何通过努力和一些小聪明,成为一个更优秀的Ruby程序员 #### Fred Wu的背景与历程 Fred Wu在技术领域的旅程始于1997年,当他得到了自己的第一台电脑——一台Intel Pentium MMX 166Mhz。同年,他开始接触BBS...

    ruby基础知识

    - **定义**:代码块是一段可以传递给方法作为参数的代码。 - **用途**:常用于循环和数组操作。 ##### 5.2 迭代器 - **定义**:迭代器是一种特殊的代码块,用于遍历集合中的元素。 - **使用**:常见的迭代器有`each...

    计算机程序的正确定义

    #### 一、程序的定义与概念 程序,也称为程式,是一种用计算机语言编写的命令序列集合,用于实现特定的目标或解决问题。这里的“计算机语言”指的是汇编语言或高级语言等,它们是用来编写程序的具体语言。 程序的...

    LittleBookOfRuby

    - **for循环结构**:使用for循环来重复执行一段代码。 #### 2. 块与while循环 - **块的使用**:作为参数传递给方法的小型代码段。 - **while循环**:当条件满足时重复执行的循环结构。 #### 3. until循环 - **...

    java开源包101

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包10

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包11

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包1

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包2

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包3

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包6

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包5

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包4

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包8

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包7

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包9

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

Global site tag (gtag.js) - Google Analytics