《七周七语言:理解多种编程范型》のruby课后习题答案

本系列是《七周七语言》的课后习题答案。这本书不拘泥于语法细节,而是横向比较各种编程语言(非热门)之间的编程范式。

是本对编程觉悟能有所帮助的好书,这里就不多做介绍了,感兴趣的同学不妨去看一下。

不得不说,Ruby的风格很黑客。

1. 打印字符串"Hello, world."

puts "Hello, world."

2. 在字符串“Hello, Ruby.”中,找出"Ruby."所在下标。

puts "Hello, Ruby." =~ /Ruby/

3. 打印你的名字十遍

puts "angular "*10

4. 打印字符串"This is sentence number 1.", 其中的数字1会一直变化到10。

i = 1..10
i.each{|x| puts "This is sentence number #{x}.\n"}

5. 从文件运行Ruby程序

create test1.rb

write -> puts "hello\n"

save and exit

run -> ruby test1.rb

6. 让玩家猜随机数,并告诉玩家猜大还是猜小

guess.rb

input = gets
rNum = rand(10)
if(input.to_i > rNum)
  puts "bigger than #{rNum}"
else
  puts "not bigger than #{rNum}"
end

7. 分别找到用代码块和不用代码块读取文件的方法,用代码块有什么好处?

File.open("test.rb") do |file|
file.each_line{|line| puts "Got #{line.dump}"}
end
File.open("test.rb").each{|f|
puts "Got #{f}"
}

用代码块可以传递传递参数,做更多的操作。

8. 如何把散列表转换成数组

hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }

可以用collect/map

hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]] 

也可以用values

hash.values

9. ruby的数组可以做栈,还能用来做什么数据结构

可以用来作队列,链表,栈,集合等等。

10. 有一个数组,包含16个数字。仅用each方法打印数组中的内容,一次打印4个数字,然后,用可枚举模块的each_slice方法重新做一遍。

myArray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
myArray.each do |a|
  if a % 4 == 0
    print "#{a}\n"
  else
    print "#{a} "
  end
end
require ‘enumerator‘
myArray =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
myArray.each_slice(4) {|a| p a}

11. 写一个可以接受散列表和数组嵌套结构的树类tree

12. 写一个简单的grep程序,把文件中出现某词组的的行权都打印出来。顺便加上行号。

puts "grep #{ARGV[0]};"
File.open("e:/ruby/reg.txt") do |file|
lnNum = 0
  file.each_line do |ln|
    lnNum +=1
    p "Line:#{lnNum} =>  #{ln}" if ln =~ /#{ARGV[0]}/
  end
end

13. 修改前面的CSV应用程序,使它可以用each方法返回CsvRow对象。然后,在CsvRow对象上,对某个给定标题,用method_missing方法返回标题所在的列的值。

比如,对于包含以下内容的文件:

one,two

lions,tigers

API可以像下面这样操作:

csv=RubyCsv.new

csv.each(|row| puts row.one)

这会打印出"lions"

module ActsAsCsv
    def self.included(base)
        base.extend ClassMethods
    end
    module ClassMethods
        def acts_as_csv
            include InstanceMethods
        end
    end
    module InstanceMethods
        def read
            @csv_contents = []
            filename = self.class.to_s.downcase + ‘.txt‘
            file = File.new(filename)
            @headers = file.gets.chomp.split(‘, ‘)

            file.each do |row|
                @csv_contents << row.chomp.split(‘, ‘)
            end
        end

        def each
            self.csv_contents.each do |row|
                i = CsvRow.new(row)
                yield i
            end
        end

        attr_accessor :headers, :csv_contents

        def initialize
            read
        end
    end
end

class CsvRow
    def initialize(row)
        @contents = row
    end
    def method_missing name, *args
        num = name.to_s
        if num == ‘one‘
            @contents[0]
        elsif num == ‘two‘
            @contents[1]
        end
    end
end

class RubyCsv
    include ActsAsCsv
    acts_as_csv
end

m = RubyCsv.new
puts "Start...\n";
m.each do |row|
puts row.one
end
puts "end...\n"

其中自定义了Csvrow类,重写了该类的method_missing方法,使得缺省的one/two方法可以成为参数灵活使用。

总结:

Ruby的开放类和模块(能写程序的程序),使得程序员可以把行为附加在语法上,这有别于传统的类继承。

时间: 2024-10-10 14:23:49

《七周七语言:理解多种编程范型》のruby课后习题答案的相关文章

《七周七语言:理解多种编程范型》のIo课后习题答案

哎,因为上周忙着写OAuth2.0服务端框架草稿 ,耽误了一周学习Io Language了. 本篇习题解答是接着 <七周七语言:理解多种编程范型>のRuby课后习题答案 Io是原型语言,类似于JavaScript,并不区别类和对象,所有的东东都是对象,对象的数据结构就是由键值表来维护的(在Io中就是所谓的槽),通过各种消息传递给对象来实现打印输出,复制对象等功能.因为语法非常简单(也木有语法糖),所以你可以尽情构建自己的库和功能. 第一天: 1. 对1+1求值,然后对1+"one&q

七周七语言:理解多种编程范型pdf

下载地址:网盘下载 作者简介  · · · · · · 作者简介: Bruce A. Tate RapidRed公司总裁,该公司主要为Ruby轻量级开发提供咨询.他曾任职于IBM公司,并担任过多家公司的客户解决方案总监和CTO.著作有十余本,包括荣获Jolt大奖的Better, Faster, Lighter Java. 译者简介: 戴玮 80后宅男,中科院自动化所在读博士,热爱机器学习与计算机视觉.编程喜C#.Ruby.Haskell而厌Java. 白明 Neusoft某开发部技术总监,拥有多

大数据基础--R语言(刘鹏《大数据》课后习题答案)

1.R语言是解释性语言还是编译性语言?   解释性语言 2.简述R语言的基本功能.   R语言是一套完整的数据处理.计算和制图软件系统,主要包括以下功能: (1)数据存储和处理功能,丰富的数据读取与存储能力,丰富的数据处理功能. (2)数组运算工具 (3)完整连贯的统计分析工具 (4)优秀的统计制图功能 3.R语言通常用在哪些领域?   人工智能.统计分析.应用数学.计量经济.金融分析.财经分析.生物信息学.数据可视化与数据挖掘等. 4.R语言常用的分类和预测算法有哪些?   (1)K-近邻算法

《七周七语言》学习笔记——Ruby——第一天:找个保姆

感觉学了东西很快就会忘记,不会留下什么,趁这次看<七周七语言>,把其中觉得有用的东西记录下来,方便以后自己查阅,这篇应该就是记录的开始了. Ruby是一门面向对象的.解释型的.动态类型的脚本语言.面向对象,说明了这门语言具有封装.继承.多态这些特性:解释型,意味着它由解释器而不是编译器来执行:动态类型,即类型是在运行时绑定而非编译时绑定:脚本语言,则说明了它很短!易上手!并且只在调用的时候解释执行. 编程模型:一切皆对象,从一个数到bool值,都被定义为对象,都有自己的方法 判断结构:块形式和

七周七数据库读书笔记(1)

七周七数据库读书笔记(1) 看到别人推荐买了这本书,决定以后每读一本书都开始写读书笔记 这本书的第二章开始部分简单的回顾了关系数据库的CRUD,这里主要讲一下数据库中INNER JOIN, LEFT JOIN和RIGHT JOIN的区别.这块很多初学数据库的人会搞不清楚而很多Blog写得又比较深反而不易理解. 先谈谈INNER JOIN INNER JOIN 我们一般解释为内联,通常来说INNER在SQL中可以被省略.简单来说就是通过两个表的某列将两个表相连.这里举例来说有假设数据库中有两张表(

七周七Web开发框架——互动出版网

这篇是计算机类的优质预售推荐>>>><七周七Web开发框架> 延续畅销书七周七语言 七周七数据库的体例和风格 学习最流行的Web开发框架:Sinatra.CanJS.AngularJS.Ring.Webmachine.Yesod和Immutant 内容简介 本书带领读者认识和学习7种影响现代Web应用并改娈了Web开发方式的框架,以期给Web开发者带来启发和思考. 本书延续了同系列的畅销书<七周七语言>.<七周七数据库>的体例和风格.全书共8章,

《七周七数据库》读书分享

# 七周七数据库 读书分享会第一期 2017.02.12 <七周七数据库> - Eric Redmond ## 预备知识 ACID:原子 一致 隔离 持久 CAP原则:一致性 可用性 分区容错性,在分布式环境下,至多只能同时满足其二 "小明,你的数据库作业呢?""我可以今天提交一半的作业,或者明天提交全部的作业,但无法在今天提交全部的作业.""...小明你给我滚出去!" 小知识点: * 原子性:原子性代表中间状态的透明性,想象从a账户

C语言程序设计 第3版 课后习题答案 苏小红 王宇颖 孙志岗 版 实验题答案 高等教育出版社 课后答案 解析 第3章 课后答案

C语言程序设计 第3版 课后习题答案  苏小红 王宇颖 孙志岗  实验题答案 高等教育出版社 课后答案 解析 第3章 课后答案 C语言程序设计 苏小红 王宇颖 孙志岗 版 习题3 课后习题答案 前辅文第1章 为什么要学C 语言 课后习题答案1.1 引言1.2 游戏?黑客和C 语言1.3 C 语言,不老的传说1.4 C 语言的爱与恨1.5 C 语言教给我们的事1.6 什么是“编程”1.7 本章小结习题1第2章 C 数据类型 课后答案2.1 常量与变量2.1.1 常量2.1.2 变量2.2 简单的屏

编程精品教材:MATLAB程序设计与应用(第3版) 课后答案 刘卫国版 课后习题答案解析

编程精品教材:MATLAB程序设计与应用(第3版) 课后答案 刘卫国版 课后习题答案解析 MATLAB程序设计与应用 第3版 高等教育出版社版 第二章 课后题全部讲解 目 录 前辅文基础篇 课后习题答案 解析第1章 MATLAB 系统环境 课后习题答案 解析1.1 MATLAB 概貌1.1.1 MATLAB 的发展1.1.2 MATLAB 的主要功能1.2 MATLAB 系统环境的准备1.2.1 MATLAB 系统的安装1.2.2 MATLAB 系统的启动与退出1.3 MATLAB 操作界面1.