这篇文章是三个多月前写的,从原blog备份过来:
最近学ror。写篇小备忘,记录一个java程序员看ruby代码的时候最晕的部分:
1.方法的调用
ruby调用方法时,参数列表可以不用括号包裹(我一开始见到这种形式认为是变量定义...)。ruby是动态语言,定义变量的时候不需要(也不能)指定类型。
方法名 (空格) 参数1,参数2...
2.代码块(Blocks)、 do...end、yield、|x|
代码块(Blocks)是指一块代码,用大括号({})或者do...end来标明起始和结束,代码块只能跟在方法调用后边。
yield语句:在方法内部使用yield语句来占位,当方法执行到yield时,实际执行的是调用方法时跟在后边的的代码块。
|x|:变量用一对'|'包裹,在代码块中使用,用于接受yield传递的参数。yield后跟的参数会传递给代码块中用| |标志的变量。
常用法Iterator 。当初Blocks就是为了迭代而设置的
调用方法:
1
|
[
1
,
2
,
3
,
4
,
5
].
each
{ |i| puts i }
|
方法定义:
1
2
3
4
5
6
|
def
each
for
each
element
yield
(element)
end
end
|
3. 严格的命名约定(约定 而不是规范。强制执行)
ruby中由多个单词组成的符号,单词间用下划线分割(c风格)。方法名和变量名都是小写开头。变量的开头字符很多时候直接决定了变量类型。
局部变量以小写字母或下划线开始。
@开头:实例变量。$开头:全局变量。全局变量可以在程序的任何地方加以引用。全局变量无需变量声明。引用尚未初始化的全局变量时,其值为nil。
‘@@’开头:类变量。例如‘@@number’。和全局变量,实例变量不同,类变量在使用前必须初始化。
常量以大写字母开始。
4. unless: 除非
if的相反形式。相当于原if条件的else部分。
unless a>1 相当于 if a<=1 或者 if not a>1
5. hash、方法的hash参数
创建hash表的语法
1
2
3
|
h = {
"first"
=>
"Amy"
,
"second"
=>
"Mike"
,
"third"
=>
"Tom"
}
|
在方法中使用hash参数,可以不按照参数列表的顺序进行参数传递。可以通过传递key=>value形式的参数来同时指定参数名和参数值。
1
2
3
4
5
|
class
SongList
def
createSearch(name, params)
end
end
|
调用方式:
1
2
3
4
|
aList.createSearch(
"short jazz songs"
, {
'genre'
=>
"jazz"
,
'durationLessThan'
=>
270
} )
|
此方法中,第一个参数表示要搜索的名字,第二个参数是一个hash,存放所有要传的参数。但是这样的写法太"clunky"(沉闷?)了,在ruby
中,可以把包裹hash参数的大括号去掉。参数列表中所有hash形式的参数,会被收集成为一个hash参数进行传递。
1
2
3
4
|
aList.createSearch(
"short jazz songs"
,
'genre'
=>
"jazz"
,
'durationLessThan'
=>
270
)
|
6. symbol(冒号开头变量)
Symbol 表示“名字”,比如字符串的名字,标识符的名字。用':'(冒号)开头。在ruby中,每个 String对象都是不同的,即便他们包含了相同的字符串内容;而对于 Symbol 对象,一个名字(字符串内容)唯一确定一个 Symbol 对象。
字符串 "abc"
symbol :abc
symbol简单来说就是一个唯一的字符串,只要冒号后面的字符相同,就是同一个symbol。
每个symbol都有个字符串的名字(可以使用to_s方法得到)。而每个String可以请求它的相应symbol(通过to_sym方法)。String和Symbol是紧密相联的,但它们不是同一个东西,他们分别是String类和Symbol类的对象。
如果一个字符串具有名字的含义,比如表单的字段名;或者这个名字会被大量的重复使用,比如hash中的key,那么就应该使用symbol,而不是String。
symbol
可以大大提高速度。Symbol的内部表示是一个整数,用来做Hash表中检索字符串的关键字,而Ruby语言执行时解析器、运算器需要大量的类名字、方
法名字的检索,这可以大大加快解析和执行时字符串查找的速度。想想,如果没有Symbol,如果需要用方法名称作为参数时,我们必须给一个字符串用来表示
方法的名称,解释器处理时首先要作字符串解析,然后才能找到出相应的方法,而如果使用Symbol会大大加快这一速度。在使用中,Symbol往往表示一
个名字,例如一个变量foo的值为1,那么 :foo可以理解为变量名,如果直接引用foo,会得到1,但如果是 :foo就指变量名本身。
Symbol对象是唯一的。每次你在代码中使用:foo,Ruby保证系统中只有一个名字为foo的Symbol对象,所以所有对:foo的引用都将引用同一个对象。
7. < 和 <<
<是继承
<<表示某个对象的特殊类。用法如下:
1
2
3
4
5
6
7
|
obj2 = SingletonTest.
new
class
<< obj2
def
meth1
puts
"This is obj2's meth1"
end
end
|
8. 方法中最后一个表达式的值,就是方法的返回值。
也可以使用return语句。
你也可以使用return语句,这样方法的返回值就是return语句的参数。Ruby语言习惯省略return语句,能少写的尽量少写,这也是Ruby的哲学。
9. Defined?
Defined?用来判断表达式是否定义。若表达式尚未定义,则返回nil,若已经定义,则返回一个字符串描述该表达式的种类。
1
2
3
|
defined
? num =
0
defined
?
100
defined
?
100
.times
|
10.%w
%w用于生成字d 串数组,可以少写大量的引号和逗号
11.问号、叹号、等号结尾
! 叹号结尾说明此方法很危险,有副作用 传入参数会被修改
? 问号结尾说明这是一个查询方法, 通常是返回布尔值的方法
= 等号结尾说明此方法用于赋值
12.区间
Ruby区间存在于任何地方,如:1到12月。Ruby用区间实现了3个不同的特性:序列,条件,间隔。
"..":两个点号创建一个闭区间a..b——[a,b],"...":而三个点号创建一个右开区间(即右边界不取值)a...b——[a,b)
exp:0..anArray.length-1 等同于 0...anArray.length
to_a 把Ruby区间转换成列表
13. <=> 太空船操作符
太空船spaceship操作符<=>,比较两个值,并根据第一个值是否小于,等于或大于第二个值,分别返回-1,0或+1
分享到:
相关推荐
Ruby是一种面向对象的脚本语言,它以其简洁、优雅的语法和强大的元编程能力而闻名。初学者在学习Ruby时,首先要理解它的基本概念和核心特性。 1. **面向对象编程(Object-Oriented Programming, OOP)**:Ruby是...
本资源“学习 Ruby 的笔记以及 Demo.zip”显然包含了关于Ruby编程的学习资料和一些实际示例代码,旨在帮助初学者理解并掌握Ruby的基础及进阶特性。 首先,让我们深入了解一下Ruby的核心特性: 1. 面向对象:Ruby是...
### Ruby初学笔记之Hello World #### 知识点概览 本文主要介绍如何通过不同的方式在Ruby中输出“Hello, World!”。这种方式不仅适用于初学者熟悉Ruby的基础语法,还能帮助理解面向对象编程的一些基本概念。 #### ...
从给定的文件信息中,我们可以提炼出一系列关于Ruby编程语言的重要知识点,涵盖基础语法、变量类型、数值操作、条件语句、循环结构以及字符串处理等核心领域。 ### Ruby基础语法 #### 注释 Ruby提供了两种注释方式...
在Ruby笔记3中,我们将会深入探讨这个强大的语言的各个方面,包括基础语法、类与对象、模块、方法、控制结构、异常处理、文件操作以及一些高级特性。 首先,让我们从基础语法开始。Ruby中的变量分为四种类型:局部...
从给定的文件信息来看,这份文档是陈刚关于Ruby on Rails的学习笔记,旨在帮助初学者更好地理解并掌握Ruby on Rails这一流行的Web开发框架。以下是对文档中提及的关键知识点的详细解析: ### 安装与配置 #### Ruby...
Ruby语言的设计哲学强调“简单优雅”,这体现在其语法设计上,它鼓励程序员编写易于阅读、易于维护的代码。 **Ruby** 的特点包括: - **简洁的语法**:Ruby的语法非常简洁明了,易于理解和学习。 - **丰富的标准库...
根据提供的“ruby学习笔记”内容,我们可以从中提炼出多个重要的Ruby编程知识点,这些知识点对于初学者来说非常有用。下面将对这些知识点进行详细的解释与扩展。 ### 一、Ruby中的全局变量 Ruby提供了多个特殊变量...
1. **Ruby 最新特性**:Ruby Kaigi 通常会介绍即将发布的 Ruby 新版本中的特性,如性能优化、语法改进等。通过源码,我们可以学习如何使用这些新特性,提升代码效率。 2. **最佳实践**:参会者笔记可能包含了他们在...
"ruby--.txt"可能是一个文本文件,其中包含了Ruby的代码示例、笔记或者问题解答,通过阅读可以加深对Ruby语法和实践的理解。 "Ruby语言入门教程附实例"和"ruby-mht"文件很可能是包含实例的教程,实践是学习编程的...
1. **语法高亮**:这是编辑器为了增强代码可读性而使用的一种技术,通过色彩和字体的差异来突出代码结构,比如使用特定颜色表示关键字、字符串、注释等。这样可以帮助开发者快速识别代码的不同部分,减少阅读和理解...
【标题】"02视频网站笔记+代码.zip" 涉及的知识点主要集中在视频网站的构建、开发工具的使用以及可能包含的源代码分析。这个压缩包包含了学习和实践视频网站开发的重要资源。 首先,"VS Code介绍.pdf" 提供了关于...
Ruby的语法简洁明了,它采用了自解释的代码风格,使得代码易于阅读和编写。例如,赋值操作符`=`, 控制结构如`if`、`else`、`while`,以及方法调用使用`.`符号等,这些都是Ruby的基本语法元素。在"Ruby 语言教程从...
现在,我们来看一下“ruby demo”可能包含的一些示例代码: 1. `hello_world.rb`:这是一个简单的“Hello, World!”程序,展示了Ruby的基本语法。 ```ruby puts "Hello, World!" ``` 2. `object_oriented.rb`:...
- **视图**:视图负责展示数据,Rails 支持 ERB (Embedded Ruby) 模板语法,允许在 HTML 文件中嵌入 Ruby 代码。可以使用 `yield` 方法在布局文件中插入具体的页面内容。 #### 第三天:优化应用功能 - **Items 表*...
在“Ruby-master”这个文件夹中,很可能包含了与Ruby或Rails相关的源代码、笔记、练习或者项目。通常,一个GitHub仓库的主分支名为master,这里可能是作者学习过程中的主分支。通过浏览和分析这些文件,读者可以深入...
在“ruby-on-the-way”资料包中,可能包含了各种教程、代码示例、练习项目和笔记,这些都是学习过程中不可或缺的部分。Git的提及意味着这份资料可能还包括了如何使用版本控制系统来管理代码的知识,这对于团队协作和...
Groovy结合了Python、Ruby和Smalltalk等语言的特性,并与Java无缝集成,使得开发者可以在Java应用中充分利用Groovy的优势。 在开始Groovy的学习之前,首先要了解如何设置Groovy开发环境。这通常包括安装Java ...
### 黑马程序员基础班精华笔记总汇 #### 计算机基础知识 - **计算机定义**:计算机是一种能够根据程序指令处理数据的电子设备。它由硬件和软件两大部分构成。 - **硬件**:包括中央处理器(CPU)、内存、硬盘、...
标题"rubylearningdotorg:Ruby学习课程"表明这是一个关于学习Ruby编程语言的资源,可能包括一系列的教程、笔记或实践活动,适合初学者和有一定基础的开发者。"肯·麦卡登"可能是课程的创建者或主要贡献者,他可能是...