前言

  • 笨办法学Rubyearnrubythehardway.org
  • 进入下面这些网站bitbucket.orggithub.comgitorious.orglaunchpad.netsourceforge.net,搜索“Ruby”,阅读代码

杂记

  • 文件的开头像#!...这样的注释是shebang,类Unix系统中依靠shebang可以使得源程序作为可执行程序来使用。
  • 使用irb进入交互式模式,使用quit或exit退出!
  • ruby -rdebug hello.rb可以进入调试模式
  • 表达式一般使用换行符分号分割,但是很多人还是愿意和python一样,用换行符分割!

第1章 欢迎来到Ruby的世界

输入输出

运行时加载

require 'rational' # 如果不指定,扩展名会自动补完
load 'path/to/somewhere/config.rb' # 用路径来指定
require 'user-library.rb' # 也可以对扩展名进行指定

第2章 数组和哈希表

  • 数组按照顺序将指向其他对象的引用进行排列
  • 哈希表使用某一个对象来对应其他的对象

数组

数组的创建

a = 1
b = "str"
# 数组字面量
c = [a, b, 3, "字符串"] #=> [1, "str", 3, "字符串"]
# 也可以嵌套使用
d = [a, c, [1, 2, 3]]  #=> [1, [1, "str", 3, "字符串"], [1, 2, 3]]

索引访问

  • 索引访问是对 Array#[ ]方法进行调用
p c[0] #=> 1
p c[3] #=> "字符串"
p c[4] #=> nil
p d[2] #=> [1, 2, 3]

负索引

带有长度的索引

表示范围的索引

p c[0..1]   #=> [1, "str"]     包含末端的范围
p c[0...1]  #=> [1]            不包含末端的范围
p c[-2..-1] #=> [3, "字符串"]
p c[-2...3] #=> [3]            不包含末端的范围

索引赋值

  • 索引赋值是对 Array#[ ]=方法进行调用。索引访问和索引赋值是完全不相干的

数组的比较

  • ===比较两个数组是否完全相同
array1 = [1, 2, "str"]
array2 = [1, 2, "str"]
array1 === array2    #=> true

各种各样的方法

array = ["a", "b", "c"]
p array.length       #=> 3
p array.size         #=> 3
p array *= 2         #=> ["a", "b", "c", "a", "b", "c"]p array.include? "c" #=> true 是否包含特定的值
p array.sort         #=> ["a", "a", "b", "b", "c", "c"]生成并返回新的数组
p array              #=> ["a", "b", "c", "a", "b", "c"]并不改变原来的数组
p array,uniq         #=> ["a", "b", "c"] 生成并返回消除了重复元素的数组
array.uniq!          #=> 更新原来的数组本身
p array              #=> ["a", "b", "c"]

带有代码块的方法和迭代

array = ["a", "b", "c"]
array.each do |item|print item + " "   #=> a b c
end

带有序数的反复操作

array = ["a", "b", "c"]
array.each_with_index do |item, index|p [item, index]
end#=> ["a", 0]
#=> ["b", 1]
#=> ["c", 2]

映射(map)

acids = ["Adenin", "Thymine", "Guanine", "Cytosine"]
signs = acids.map{|acid| acid[0, 1]}
p signs #=> ["A", "T", "G", "C"]
  • 再例
  • downcase:是表示downcase方法的名字的符号字面量
# 单纯的map
acids.map {|a| a.downcase} #=> ["adenin", "thymine", "Guanine", "cytosine"]
# 省略版
acids.map{&:downcase}      #=> ["adenin", "thymine", "Guanine", "cytosine"]

sort

array = ["73", "2", "5", "1999", "53"]
# 默认的字典序排序
p array.sort  #=> ["1999", "2", "5", "53", "73"]# 转换成数值再比较并排序
p array.sort{|x,y| x.to_i <=> y.to_i}  #=> ["2", "5", "53", "73", "1999"]

选择

哈希表

  • 哈希表是使用将某一任意对象作为键来对应其他对象的容器对象,相当于其他语言的映射(map),词典(dictionary),关联数组。
#!/usr/bin/env ruby
# encoding: utf-8month_to_ordinary = {"Jan" => 1, "Feb" => 2, "Mar" => 3, "Apr" => 4, "May" => 5, "Jun" => 6,"July"=> 7, "Aug" => 8, "Sep" => 9, "Oct" => 10, "Nov" => 11, "Dec" => 12,
}p month_to_ordinary["Aug"] #=> 8
p month_to_ordinary["Jun"] #=> 6

哈希表的创建

  • 一般方法
prefix = "yapoo"
abbreviation = {"CAI"    =>  "Condensed-Abridged Tiger""Yapomb" =>  prefix + "womb""pilk"   =>  prefix + "milk"
}
  • 简单的一般方法
params = {rins:5, kimiko:7, kayoL:nil}
p params  #=> {:rins=>5, :kimiko=>7, :kayoL=>nil}

索引运算表达式

  • 对哈希表进行索引访问要比数组简单,方法只有一种:通过传递被作为键的对象来返回对应的值。索引访问也是如此。

哈希表的比较

  • 哈希对象之间,对象中所有对应元素间的键和值都相等时才相等
  • 哈希表顺序与内存中真实存储的数值无关,不管你怎么随意调换位置,其实都不变,因为哈希是根据哈希值唯一对应存储的

各种各样的方法

  • 哈希和数组一样,通过迭代处理可以按顺序对所有的元素处理
book_to_author = {"Ruby in Nutshell" => "Flanagan","Programing Ruby"  => "Thomas","AWDWR"            => "Thomas"
}book_to_author.each do |book, author|puts "#{book} by #{author}"
end

Enumerable模块

  • each属于Enumerable模块,Array和Hash都继承了Enumerable,这样一来,就可以在Array和Hash中都可以使用each这个方法

本章总结

  • 数组和哈希表是Ruby程序中具有代表性的容器代表
  • 数组是由元素排列而成的
  • 将元素排列在方括号内以构成数组字面量,这样可以创建包含这些元素的数组
  • 对数组使用负的索引是表示从最后一个元素开始的反向位置
  • 数组可以使用带有长度和范围的索引
  • 某些方法同时具有破坏和非破坏性的版本
  • 哈希表的元素是每个作为键的对象和作为值得对象的对应关系
  • 将元素排列在花括号内以构成哈希表字面量,这样可以创建包含这些元素的哈希表
  • 使用迭代能够安全而简单地调用容器结构的元素
  • Enumerable模块从each方法导出大量的其他方法。数组和哈希表都是从Enumerable模块继承了这些方法
  • Enumerable::Enumerator对象是从each方法以外导出Enumerable方法群的代理

第3章 值

类型和自动转换

  • Ruby对附属类型要求很严格,数据类型一般不会自动变换。数据总是隶属于固定的类,运算时不会无缘无故地被转换成其他的类
  • 字符串不会自动转换成数值,类型的转化需要使用方法to_i

宇宙飞船(Spaceship)运算符

  • 在《perl语言入门》中,把<=>翻译成了飞碟运算符,并且在高级排序中使用,这里也不例外!
  • 运算符的左边和右边相比,小时返回负数,相等时返回0,大时返回正数!
1 + "2".to_i #=> 3
  • 数值运算会向精度高的类型靠拢, double + int ==> double

本章总结

  • Ruby中内置了整数类Integer和浮点数类Float
  • 整数类型中对多倍长整数的使用不需要有太多考虑,对整数的溢出也不需要担心。
  • 浮点数的实现是和系统相关的,但是,一般来说,都依照IEEE754规则

第4章 字符串

  • Ruby经由Perl,继承了AWK和ShellScript的精髓。
  • 随着Web编程的发展,使我们更加体会到文本处理的重要性,尤其是正则表达式。
  • 正则表达式这一部分深入学习下吧。

第5章 输入输出

就只注意下输出有puts、p、print这三个关键字吧

第6章 变量和表达式

伪变量

  • 原来下面这个还可以叫伪变量
    7个:nil、true、false、self、FILELINEENCODING

异常处理

  • 左侧的代码执行发生了异常,则执行右边的异常处理
do_something rescue error_handling
  • 当用户想在某个地方明确的产生异常,可以使用raise
raise ArgumentError, 'message'

大范围跳出

catch(:exit){loop do            # 无限循环loop do        # 无限循环throw:exit # 从这里跳出endend
}

第7章 方法

第8章 对象和类

第9章 超越本书

后记

  • 本教程暂时到此为止,以后用的时候再查吧。

《Ruby》学习笔记相关推荐

  1. 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术

    本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...

  2. 第一行代码学习笔记第二章——探究活动

    知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...

  3. 第一行代码学习笔记第八章——运用手机多媒体

    知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...

  4. 第一行代码学习笔记第六章——详解持久化技术

    知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...

  5. 第一行代码学习笔记第三章——UI开发的点点滴滴

    知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...

  6. 第一行代码学习笔记第十章——探究服务

    知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...

  7. 第一行代码学习笔记第七章——探究内容提供器

    知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...

  8. 第一行代码学习笔记第五章——详解广播机制

    知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...

  9. 第一行代码学习笔记第九章——使用网络技术

    知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...

  10. 安卓教程----第一行代码学习笔记

    安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...

最新文章

  1. CodeForces 416B
  2. Android Studio Library 模块中 Native 代码进行 debug 的一些坑
  3. Xcode 9 新建的工程如何支持 iOS 8
  4. 大话深度学习:B站Up主麦叔教你零代码实现图像分类神经网络
  5. java提升权限运行_提升代码的运行权限,实现模拟管理员身份的功能
  6. 自制 Word、Excel 批转 PDF 工具
  7. 实用的 PHP 正则表达式
  8. [JavaScript]Call和Apply方法
  9. Android Q分区存储权限变更及适配
  10. 超星高级语言程序设计实验作业 (实验02 分支与循环程序设计)(二)
  11. 给快播指一条生路:转型会员付费吧
  12. 原子哥家的 SIM800L透传模式配置
  13. 高刷新率电视机有必要吗?
  14. vue 自定义事件 解绑
  15. 改写[转载]关闭危险端口的批处理文件FOR WIN7
  16. python之parser.add_argument()输入是什么!!
  17. 廖金菊——湖南高尔夫旅游职业学院文化社诗人
  18. 海鲅S1小白装黑果心得体会
  19. Activiti查看流程历史记录
  20. 基于SSM的高校共享单车管理系统【数据库设计、源码、开题报告】

热门文章

  1. MVC三层架构Servlet
  2. pyinstaller打包的一些注意事项和问题:找不到文件?!
  3. EMD的改进版EEMD
  4. 软件工程-23种设计模式和7大设计原则
  5. 应用概率统计(陈魁 编著)部分答案(概率部分1~6章)
  6. 劳动仲裁流程怎么走?
  7. C/C++和python中的函数参数传递
  8. isin用计算机怎么打,2017职称计算机考试Excel模拟试题
  9. wifi网络接入原理(下)——关联Association
  10. unity 渲染问题