我想读《Best of Ruby Quiz》并实践里面的内容是熟悉ruby的一个好方法,那么让我从今天开始,每天都用ruby来quiz一下。
几点说明:1、我是ruby新手,一开始要从看人家的答案开始,不一定能够提供自己的解决方案,而且我写的有些东西可能是很粗浅的,也请大家不要见笑;2、笔记里面的问题都是我自己不明白的地方,希望并欢迎与大家交流;3、我的笔记主要针对书上给出的标准答案。
闲言少叙,下面开始Quiz 1: Mad Libs
这个quiz的意图应该是读取一个文件中的文本(说明:下列文本中的下划线和颜色都是我自己加的,是为了看起来清晰),例如:
I ((a verb, past tense)) to the sandwich shop across the street for lunch yesterday. I go there at least ((a number)) times a week.
将这段文本读出后,针对每对(())中的内容,提问,并获取用户输入,例如针对((a number)),提问“Give me a number ” ,并接受用户的输入,进行替换。处理完成后,上面的文本应该变为:
I walked to the sandwich shop across the street for lunch yesterday. I go there at least 9 times a week.
1、书中给出的解决方案是要使用Ruby的内建类库"erb",erb是一个进行类似于模板处理功能的类库。可以执行一段文本中用<%%>包起来或者是以%开头的Ruby代码。
require 'erb'
str = %{\
% 2.times do |i|
This is line <%= i %>
%end
%% done}
ERB.new(str, 0, '%').run
运行结果是:
This is line 0
This is line 1
% done
2、$answers = Hash.new
这一句里面的$表示一个全局变量的标识。
看了Ruby这些日子,我觉得这门语言最繁琐的就是使用了那么多的符号,并且互相之间产生了那么多的组合,对于初学者来说,记录和使用他们,是要付出很大努力的。而且我觉得在敲入代码的时候,这么多符号也很麻烦。比如这个$,就是其中之一。
3、$answers[question]
answers是一个Hash,这样的调用方式,表示引用answers这个Hash中以question为key的对应的value
4、key = if question.sub!(/^\s*(.+?)\s*:\s*/, "") then $1 else nil end
上面的代码有两个目的,
第一,将(.+?)中匹配得到的值赋予key;
第二,对question字符串进行处理,去除掉第一个冒号之后的空格和冒号以及之前的字符
例如:假定question = " a : b : c ",经过上述语句处理后,key = "a", 而question = "b : c "
5、unless ARGV.size == 1 and test(?e, ARGV[0])
● ARGV是一个包含命令行参数的数组。ARGV[0]是程序的第一个参数而不是程序名称。当前程序的名称位于全局变量$0中。
● test(?e, ARGV[0])
test test(cmd, file1 <, file2>)->obj
使用数值cmd在file1或file1和file2上执行各种测试。cmd为?e,表示如果file1存在,则为true。因此,上面的语句的含义为:
“除非只有一个命令行参数,并且存在该参数表示的文件,否则:”执行后面的语句
6、madlib = "\n#{File.basename(ARGV.first, '.madlib' ).tr('_' , ' ' )}\n\n" + File.read(ARGV.first)
● File.basename
File.basename(filename<, suffix>) -> string
返回给定文件名filename的最后一部分。如果有suffix参数,且它出现在filename的末位,则它将被删除。通过使用".*"可以去除任意扩展名。
File.basename("/home/gumby/work/ruby.rb") -> "ruby.rb"
File.basename("/home/gumby/work/ruby.rb", ".*") -> "ruby"
●ARGV.first
arr.first ->obj 或nil
arr.first(count) ->an_array
返回数组的第一个元素,或前count个元素。如果数组为空,第一种形式返回nil,而第二种形式返回一个空数组。
● tr(' _', ' ')
tr str.tr(from_string, to_string) ->string
返回str的一个拷贝,用to_string的相应字符替换from_string的字符。如果to_string的长度比from_string短,就会用to_string的最后一个字符来填充。这两个字符串可能都使用c1-c2表示法来表示字符的区间,同时from_string可能以一个^字符开始,表示除了这些给定字符之外的所有字符。
"hello".tr('aeiou', '*') ->"h*ll*"
"hello".tr('^aeiou', '*') ->"*e**o"
"hello".tr('el', 'ip') ->"hippo"
"hello".tr('a-y', 'b-z') ->"ifmmp"
综上,我认为上面这句的作用应该是将后缀为madlib的文件的文件名和文件的内容统一放在一个大字符串内
====================================================================================
上述6点,是我针对书上提供的标准解决方案的问题笔记。欢迎大家一起进行探讨。
MadLib标准解决方案
分享到:
相关推荐
《Best of Ruby Quiz》是一本聚焦于Ruby编程语言的精选问答集锦,旨在帮助开发者深入理解和掌握Ruby的各种特性。这本书的描述简洁明了,"Best of Ruby Quiz"直接点出了其核心内容——一系列关于Ruby的精彩挑战和问题...
读者大多可以想出一种办法来解决这些问题,往往还能 通过思考和重构找到第二种优雅的设计,但这本书却给你列出了第三种、第四种真正精巧的解决方案——充分利用Ruby技巧才能得出的解决方案。
通过查看提供的文件列表,我们看到有“Pragmatic.Bookshelf.Best.of.Ruby.Quiz.Mar.2006.pdf”,这很可能是《Pragmatic Programmer》出版社出版的一本关于Ruby Quiz的最佳解答合集,其中可能包含了对这个具体挑战的...
#### 一、《Pragmatic Bookshelf: Best of Ruby Quiz Mar. 2006》概述 - **书籍标题**:本书名为《Pragmatic Bookshelf: Best of Ruby Quiz Mar. 2006》,是一本专注于Ruby编程语言的经典练习册。 - **书籍内容**:...
《Pragmatic Bookshelf Best of Ruby Quiz Mar 2006》是一本专注于Ruby编程语言的书籍,由Pragmatic Bookshelf出版社出版。这本书的独特之处在于它采用了问答的形式,即"Quiz",来帮助读者深入理解和掌握Ruby的核心...
《Best.of.Ruby Quiz》是一本专为Ruby初学者精心编写的英文教程,旨在帮助新手逐步掌握这门强大而优雅的编程语言。Ruby作为一种动态、面向对象的脚本语言,因其简洁的语法和强大的元编程能力,深受开发者的喜爱。...
"Pragmatic.Bookshelf.Best.of.Ruby.Quiz.Mar.2006.pdf"是这本书的电子版,出版于2006年3月,由Pragmatic Bookshelf出版社发行。 Ruby是一种动态、面向对象的脚本语言,以其简洁、优雅的语法和强大的元编程能力著称...
Best of Ruby Quiz – Free Pdf Book
Best.of.Ruby.Quiz.pdf O'Reilly - Ruby in a Nutshell (2001).chm OReilly.Ruby.Cookbook.Jul.2006.chm Rails Recipes (2006) .pdf Rolling with Ruby on Rails.chm Ruby On Rails Book (Save Ink Version).pdf ...
### MongoDB与Ruby:深入探索文档型数据库及其在Ruby中的应用 #### 一、MongoDB简介 MongoDB是一款基于分布式文件存储的开源文档型数据库系统,它由C++编写而成,适用于处理大规模数据集。MongoDB的设计哲学是为了...
object-array-quiz-lucyk22:由GitHub Classroom创建的object-array-quiz-lucyk22
测验 node.js 中的项目用于制作测验 连接到 Postgress 数据库 要在本地运行,请在 unix 命令控制台键入:> foreman ... 要在本地运行,Windows 命令控制台键入:> Quiz 在浏览器中: 要在云中运行: 在浏览器中: :
"javascript-quiz"项目就是一个利用JavaScript构建的互动式测验,旨在帮助学习者检验和提升他们的JavaScript知识。这个测验可能是通过创建HTML页面来呈现问题,使用JavaScript处理用户交互,并可能结合CSS来实现视觉...
:closed_mailbox_with_raised_flag: Contribuindo para o Quiz应用程序 Para contribuir com Weather App,埃斯帕加斯地区: Bifurque esterepositório。 Crie um分支: git checkout -b <nome> 。 faasa ...
在IT行业中,堆栈是一种非常基础且重要的数据结构,它遵循“后进先出”(LIFO)的原则。本主题将深入探讨如何使用Java来实现一个堆栈。在这个"Quiz2_Stack"项目中,我们将关注堆栈的基本操作,如压栈、弹栈以及检查...
【标题】"ssd3 practical quiz2"是一个与软件工程相关的实践测验,可能是课程"Software System Development 3"(SSD3)的一部分。这个测验可能涉及了软件开发过程中的实际操作和问题解决,旨在检验学生在项目管理和...
文件名 "Best of Ruby Quiz Volume One.pdf" 暗示了一本书籍,可能是系列中的第一卷,专门收集了关于Ruby编程的智力挑战或问题解答。这种类型的书籍通常会涵盖各种编程技巧、最佳实践以及对语言特性的深入理解,对于...
在这个项目中,我们将深入探讨如何利用这些技术构建一个完整的Web应用程序。 首先,HTML是网页的基础结构,它定义了页面上的内容布局,如标题、段落、按钮等。在创建测验应用时,我们需要设计一个清晰的用户界面,...