《Ruby》学习笔记
前言
- 笨办法学
Ruby
earnrubythehardway.org - 进入下面这些网站
bitbucket.org
、github.com
、gitorious.org
、launchpad.net
、sourceforge.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、FILE、LINE、ENCODING
异常处理
- 左侧的代码执行发生了异常,则执行右边的异常处理
do_something rescue error_handling
- 当用户想在某个地方明确的产生异常,可以使用raise
raise ArgumentError, 'message'
大范围跳出
catch(:exit){loop do # 无限循环loop do # 无限循环throw:exit # 从这里跳出endend
}
第7章 方法
第8章 对象和类
第9章 超越本书
后记
- 本教程暂时到此为止,以后用的时候再查吧。
《Ruby》学习笔记相关推荐
- 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术
本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...
- 第一行代码学习笔记第二章——探究活动
知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...
- 第一行代码学习笔记第八章——运用手机多媒体
知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...
- 第一行代码学习笔记第六章——详解持久化技术
知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...
- 第一行代码学习笔记第三章——UI开发的点点滴滴
知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...
- 第一行代码学习笔记第十章——探究服务
知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...
- 第一行代码学习笔记第七章——探究内容提供器
知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...
- 第一行代码学习笔记第五章——详解广播机制
知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...
- 第一行代码学习笔记第九章——使用网络技术
知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...
- 安卓教程----第一行代码学习笔记
安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...
最新文章
- CodeForces 416B
- Android Studio Library 模块中 Native 代码进行 debug 的一些坑
- Xcode 9 新建的工程如何支持 iOS 8
- 大话深度学习:B站Up主麦叔教你零代码实现图像分类神经网络
- java提升权限运行_提升代码的运行权限,实现模拟管理员身份的功能
- 自制 Word、Excel 批转 PDF 工具
- 实用的 PHP 正则表达式
- [JavaScript]Call和Apply方法
- Android Q分区存储权限变更及适配
- 超星高级语言程序设计实验作业 (实验02 分支与循环程序设计)(二)
- 给快播指一条生路:转型会员付费吧
- 原子哥家的 SIM800L透传模式配置
- 高刷新率电视机有必要吗?
- vue 自定义事件 解绑
- 改写[转载]关闭危险端口的批处理文件FOR WIN7
- python之parser.add_argument()输入是什么!!
- 廖金菊——湖南高尔夫旅游职业学院文化社诗人
- 海鲅S1小白装黑果心得体会
- Activiti查看流程历史记录
- 基于SSM的高校共享单车管理系统【数据库设计、源码、开题报告】