翻译-Programming Ruby
对《Programming Ruby》的翻译
CloneableX
这个作者很懒,什么都没留下…
展开
-
When Trouble Strikes
悲观地讲,就算使用 Ruby 编写程序也不能避免出现许多问题。即使对谈论起这个问题感到很抱歉。但不需要担心!Ruby 拥有一些可以帮助我们调试的特性。稍后我们会看到这些特性,并且我们也会展示你使用 Ruby 时通常会遇到的问题,以及如何解决这些问题。Ruby 调试器Ruby 本身带有调试器,并且可以在基础系统上很方便地构建。你可以通过 -r debug 调用解释器将调试器运转,也可以添加其他 Ruby 参数以及脚本名称。ruby -r debug [ options翻译 2020-09-26 17:40:44 · 233 阅读 · 0 评论 -
Threads and Processes
Ruby提供了两种管理程序的基本方式,所以你可以同时运行程序的不同部分。你可以通过多线程将同一程序中多个合作任务分离,你也可以通过多进程分离不同程序间的任务。让我们依次来看一下。多线程通常可以使用 Ruby 的线程一次性做两件事。这些都是进程内,并且在 Ruby 解释器中实现的。这种方式使 Ruby 线程变得便携,它不需要依赖操作系统,而且使用原生线程也不会获得什么好处。你可能会体验到线程饥饿(由于低优先权的线程没有机会运行)。如果你管理的线程发生了死锁,整个进程可能会逐渐停止。如果某些线程调用操作系翻译 2020-09-20 18:04:20 · 229 阅读 · 0 评论 -
Basic Input and Output
一开始时你会以为 Ruby 提供了两组独立的 IO例程。第一种是基本接口,目前为止我们一直都是使用它。print "Enter your name: "name = gets在 Kernel 模块中实现了一组完整的 IO 相关方法,比如get,open,print,printf,putc,puts,readline,readlines和 test,这些方法使得编写 Ruby程序更加方便和简洁。这些方法通常对标准输入输出进行 I/O操作,这有利于它们编写过滤器。你可以从 411 页开始查看文翻译 2020-09-15 06:44:06 · 210 阅读 · 0 评论 -
Modules
模块是一种将方法,类和常量组织在一起的方式。模块能够提供两个主要的好处:模块提供命名空间防止名字冲突模块实现了 mixin 功能命名空间当你开始编写越来越庞大的 Ruby程序时,你会很自然地找到自己曾经写过可重用的代码,也就是与一般可应用的例程关联的库。你希望把代码分别存储到不同的文件中,这样方便在不同的Ruby 程序中使用。通常这些代码会分布在类中,所以你常常将一个类(或一组相关联的类)存储为一个文件。不过有时你也想要将不能自然组成类的东西组合起来。一种最原始的方式就是把所有的东西都翻译 2020-09-06 18:49:21 · 181 阅读 · 0 评论 -
Exceptions, Catch, and Throw
我们已经开发了一些代码,比较完美的是暂时还没有出现错误。每个库都可以成功调用,用户从不输入无效的数据,并且资源丰富且易获得。但事事无常。欢迎来到真实的世界。在真实的世界中错误时常发生。好的程序和程序会预计到它们的出现并且合理地处理它们。不过要做到这点并是如同想像的那么简单。通常一段发现错误的代码是没有相应的上下文指导其如何进行下一步的。比如,当尝试打开一个不存在的文件时,有些环境是可以接受的,对另外一些环境却是重大的错误。你的文件处理模块是如何做的呢?传统方式都是返回错误码。open方法会返回指定值用翻译 2020-09-05 18:54:52 · 235 阅读 · 0 评论 -
Expressions
一直以来我们使用 Ruby的表达式时都表现得十分傲慢。毕竟,a=b+c是标准事物。你完全可以不阅读本章也可以完成大量的 Ruby 代码工作。但你的代码就不会写得那么愉快。Ruby中的第一个不同点在于任何操作都会返回合理的值,就像所有的事物都是表达式一样。实际上这是什么意思呢?非常明显的就是声明链的功能。a = b = c = 0 »0[ 3, 1, 7, 0 ].sort.reverse »[7, 3, 1, 0]或许还没有那么明显,一般情况下在 C 和翻译 2020-09-01 23:25:58 · 220 阅读 · 0 评论 -
More About Methods
其他语言都有函数,程序,方法或例程,但在 Ruby中只有方法,也就是一堆带返回值的表达式。关于书中的大部分内容,我们都不假思索地定义和使用方法。现在也是时候了解一下它的细节了。定义方法如同我们在书中看到的,方法通过 def关键词定义。方法名应该使用小写字母开头。(即使用大写字母作为方法名开头也不会立即报错,但当你调用此方法时,Ruby会认为你需要一个常量,而不是调用方法,最后会导致返回结果的错误)。带有询问行为的方法会在末尾加上?,比如 instance_of?。还有些方法名带有 !的,它们翻译 2020-08-30 22:43:34 · 116 阅读 · 0 评论 -
Standard Types
我们已经实现了很多点唱机的代码片段,但我们疏忽了一些问题。虽然我们已经了解过数组,散列表以及procs,但是还没有了解过 Ruby的基础类型:数字,字符串,范围和正则表达式。让我们通过本章的内容学习这部分知识。数字Ruby支持整型和浮点型数字。整型的长度不定(最大值由系统的可用存储决定)。在指定范围内创建的整型数是以二进制的形式保存(一般范围为 -230 到 230-1 或者 -262 到 262-1 之间),这个范围内的整型数都是 Fixnum 类的对象。超过这个长度范围的整型数就以 Bignu翻译 2020-08-23 20:56:03 · 309 阅读 · 0 评论 -
Containers, Blocks, and Iterators
点唱机里面只有一首歌不会太受欢迎(或许在有些酒吧可以),因此我们需要尽快考虑为歌曲做一个目录,以及为待放歌曲增加歌单。这些可以用容器解决,就是那些保存一个或多个对象引用的工具。目录和歌单都需要类似的设置方法,比如添加歌曲,删除歌曲,返回歌曲列表等等。播放列表需要执行其他的一些功能,比如插入广告,或者显示累计的播放时间,但是我们稍后再考虑这些问题。与此同时,开发一些SongList 类听起来不错,然后再细节化至目录和播放列表。容器在我们开始实现之前,我们需要了解如何将歌曲列表存储到 SongList翻译 2020-08-18 21:49:36 · 182 阅读 · 0 评论 -
Classes, Objects, and Variables
通过我们之前已经证明的例子,你应该知道我们曾说 Ruby 是一门面向对象的语言。所以这章就是为了说明这个论断的。我们会一起学习如何使用 Ruby 创建一个类和对象,而且对比一下 Ruby 在此方面比其他语言优秀的地方。按着这个方向,我们会实现网络版爵士蓝调音乐盒这个价值斐然产品的部分功能。经过几个月的努力之后,我们的研发人员确定音乐盒产品需要歌曲。所以看起来歌曲是一个适合以 Ruby 的类进行表现的事物,也是这个产品的一个好开端。我们也知道,真正的歌曲应该有名称,作者以及时长,因此我们将要确保在我们的程翻译 2020-08-16 09:49:52 · 176 阅读 · 0 评论 -
Ruby.new
Ruby.new当我们开始写这本书时,我们有一个宏大的计划(那时我们还比较年轻)。我们希望将 Ruby 这门语言从头至尾地描述一遍,从类和对象开始,直到语法中的种种细节为止。那时这的确是个好主意。因为在 Ruby 看来万物皆对象,因此我们打算从对象开始谈起。或者,这只是我们的一厢情愿。不幸的是,以这种方式描述一门语言是困难的。如果你不曾了解字符串,if 声明,赋值以及其他细节,要写出一个类的例子是难以成立的。尽管我们要从头至尾地描述这门语言,但我们也需要从低级别的细节开始了解,这样才能知晓样例代码的含翻译 2020-08-09 19:01:08 · 423 阅读 · 0 评论