转自http://www.cslog.cn/Content/ruby_basic_note.html
1.Ruby是一个面向对象的(object-oriented)的编程语言.
Ruby中所有的操作元都是对象(object).
类(Class),方法(method),实例(instance),对象(object, class instance), constructor, instance variable, instance method, --当自然语言学家遇上程序语言...
method实例:
"dave".length
line_item_one.quantity
-1942.abs
cart.add_line_item(next_purchase)
2.命名
局部变量,method参数和method名以小写字母或下划线开头.实例变量以@号开头.多单词名最好以下划线分隔单词
实例: line_item
Class名,module名,常量以大写字母开头. 最好以大写字母分隔不同单词.如: PurchaseOrder
Symbols如: redirect_to :action => "edit", :id => params[:id]
用来指定值. ???
3.Method
实例:
def say_goodnight(name)
result = "晚安, " + "#{name.capitalize}"
return result
end
#该道别了...
puts say_goodnight("小李")
puts (say_goodnight("王老板"))
Ruby语句每句一行,每行结束不用任何符号
+可以用来连接字符串
注释语句以#开头
使用def定义method
puts method用来调用method,将结果显示在平台上.
双引号字符串内的转意字符(如
)和变量名(上面的#{name}及其method capitalize())将被解释,单引号内字符串则不被解释.
Ruby自动返回method中最后一个表达式的值. 上method等于:
def say_goodnight(name)
"晚安, #{name.capitalize}"
end
puts say_goodnight("小李")
4.Class
class Order < ActiveRecord::Base
#class 类名 < 子model ::主class名 (定义声明和从属声明)
has_many :line_items
def self.find_all_unpaid
#使用 self.前缀,定义class method (相对于instance method)
#可在程序中任意调用Order.find_all_unpaid
find(:all, 'paid = 0')
end
def total
#定义instance method
#调用时应用到实例对象上
#如puts "总数是#{order.total)",注意这个小写的order
sum = 0
line_items.each {|li| sum += li.total}
end
end
关于instance变量
class Greeter
def initialize(name)
@name = name
# instance变量以@开头
#变量@name只能在类内调用
end
def say(phrase)
puts "#{phrase},#{@name}"
end
end
g1 = Greeter.new("小李")
g2 = Greeter.new("王老板")
g1.say("好啊") #=> 老啊,小李
g2.say("早啊") #=> 早啊,王老板
如要将Greeter里的name在外部调用,要用以下方法:
Class Greeter
def initialize(name)
@name = name
end
def name
@name
end
def name=(new_name)
#???
@name = new_name
end
end
g = Greeter.new("小李")
puts g.name #=>小李
g.name = "王老板"
puts g.name #=> 王老板
方便实现上面功能的代码:
class Greeter
attr_accessor :name #可读可写
attr_reader :name #只可读
attr_writer :name #只可写
Private和Protected
Private methods只能在同instance内调用
Protected methods除了可在同instance内调用, 也可在类或子类内调用
5.Module
Module和Class类似,是一个常量,method,module和class集. 不同的是不能用Module来创建object.
Module的作用:
1.产生namespace
2.分享class间的功能,没继承效果
多个class可以共用一个module,一个class也可使用多个module.
Rails还使用module产生helper method, 辅助应用到view.
6. Array 和Hash
Array和Hash 都是一个数组. Array的索引是整数, 而Hash的索引可以是object. Array的效率相对比Hash高.
Array和Hash都可包含不同类型的变量
Array实例:
a = [1, '狗狗', 3.14] #新数组
a[0] #调用(1)
a[2] #调用(nil, 在Ruby中nil是一个object,指代nothing)
#只有nil和false才等同于逻辑"否". 0为true
又一实例说明<<的用法:
ages = [] #定义新数组
for person in @people
ages << person.age #<<将数值追加到数组中去
end
又又一个实例说明自动生成单词数组的用法:
a = ['ant', 'bee', 'cat', 'dog', 'elk']
a = %w{ ant bee cat dog elk }
Hash实例:
inst_section = {
:高手 => '小张',
:新来的 => '小李',
:老板 => '王老板'
}
#调用
inst_section[:高手] #=>'小张'
inst_section[:最讨厌的] #=>nil
左边的symbols是索引,右边的是值,索引不能重复
值可以另一个array或hash
当hash是method的最后一个参数时,可以省略括号,如:
redirect_to :action => 'show', :id => product.id
7.流控制
if实例:
if count > 10
puts "再来一次"
elseif
"你输 了"
else
"输入一个数字"
end
while实例:
while weight < 100 and num_pallets <= 30
pallet = next_pallet()
weight += pallet.weight
num_pallets += 1
end
表达式简化式实例:
puts "早上好" if time < a
8.正则表达式
写法 /pattern/ 或 %r{pattern}
用法实例:
if line =~ /P(erl|ython)/ #用这个来查找匹配
puts "这个不怎么样吧?"
end
正则小例:
/ab+c/ a跟着多个或一个b,后面接c
9.Block 和 Iterator
一行的Block实例:
{ puts "你好" }
多行的Block实例:
do
club.enroll(person)
person.socialize
end
Block的用法实例:
greet { puts "嗨" }
放在method后,如有参数,block放到参数后,如:
verbose_greet("王五","老板") { puts "嗨" }
iterator is a method that returns successive elements from some kind of collection, such as an array.
Block 和 Iterator联合使用实例:
animals = %w( ant bee cat dog elk )
animals.each { |animal| puts animal }
#animals.each会yield出后面的block. 本身的值会经|animal|传给block.
所有的整数带有times() method, 使用:
3.times { print "哇! " }
10.意外处理
begin
content = load_blog_data(file_name)
rescue BlogDataNotFound
STDERR.puts "#{file_name}文件没有找到"
rescue BlogDataFormatError
STDERR.puts "#{file_name}文件数据无效"
rescue Exception => exc
STDERR.puts "读取#{file_name}文件出错:#{exc.message}"
end
11.Marshaling Objects
将object 转换成数据流,方便移动.
12. 互交Ruby
略
13.惯用形式
empty! Bang method( normally do something destructive to the receiver)
empty? 判断
a || b 如果a为false或nil, 则返回 b, 否则返回a.
a ||= b a = a || b
a += 1 a = a +1
a *= 5 a = a * 5
* 对于大部分操作:a op= b a = a op b
分享到:
- 2007-03-14 12:44
- 浏览 1926
- 评论(0)
- 论坛回复 / 浏览 (0 / 2548)
- 查看更多
相关推荐
《Ruby语言入门教程v1.0》是一份详尽的指南,旨在为初学者提供一个易于理解的Ruby语言学习路径。下面,我们将深入探讨该教程所涵盖的关键知识点,特别是其标题和描述中提及的核心概念。 ### 1. 编程语言的发展简史 ...
这个"Ruby语言入门教程(中文版)[PDF]"涵盖了Ruby的基础到进阶内容,适合初学者和希望巩固Ruby知识的开发者。通过阅读并实践教程中的例子,读者可以逐步掌握Ruby编程,并开启在Ruby世界中的探索之旅。
本教程“Ruby语言入门教程v1.0”旨在为初学者提供一个通俗易懂的学习路径,帮助他们快速掌握Ruby的基础知识。教程将从Ruby语言的起源和发展讲起,介绍其设计理念和主要特性,使学习者对Ruby有一个全面的认识。 Ruby...
本教程旨在为初学者提供一个全面的Ruby语言入门指南,帮助他们快速掌握这门语言的基础知识。 首先,Ruby的核心设计理念是“人本主义”,这意味着它强调代码的可读性和程序员的生产力。Ruby的语法清晰,易于理解,...
### Ruby语言入门教程V1.0 #### 一、概述 在《Ruby语言入门教程V1.0》中,作者张开川系统地介绍了Ruby语言的基础知识及其在实际开发中的应用。本教程不仅适合初学者快速掌握Ruby语言的核心概念和技术要点,同时也...
内容概要:这份资源包括了一份Ruby语言入门的中文教程PDF以及相应的源代码demo。教程将介绍Ruby语言的基础概念、语法特性和常用技巧,而源代码demo则提供了实际的示例代码,帮助读者更好地理解和应用Ruby编程语言。 ...
### RUBY语言入门教程知识点概览 #### 一、RUBY简介 - **定义与特点**:RUBY是一种面向对象的脚本语言,简洁而强大,由日本人松本行弘(Yukihiro Matsumoto)在1995年设计并开发。RUBY语言结合了Perl语言的强大功能...
本入门教程“Ruby语言入门教程v1”旨在帮助初学者快速掌握Ruby的基础知识和核心概念,以便能轻松地进行编程。 Ruby的起源: Ruby由日本人松本行弘在1995年创造,其设计目标是强调程序员的生产力和代码的可读性。它...
本"Ruby语言入门教程"是针对初学者精心设计的,旨在帮助新接触编程或者想学习Ruby语言的读者快速上手。 1. **Ruby的基础概念** - 变量:Ruby中的变量分为五种类型,分别是局部变量(以小写字母或下划线开头)、...