`
SwiftHorse
  • 浏览: 214244 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类
最新评论

Ruby语言入门

阅读更多

转自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

分享到:
评论

相关推荐

    Ruby语言入门教程v1.0

    《Ruby语言入门教程v1.0》是一份详尽的指南,旨在为初学者提供一个易于理解的Ruby语言学习路径。下面,我们将深入探讨该教程所涵盖的关键知识点,特别是其标题和描述中提及的核心概念。 ### 1. 编程语言的发展简史 ...

    ruby语言入门教程(中文版)[PDF]

    这个"Ruby语言入门教程(中文版)[PDF]"涵盖了Ruby的基础到进阶内容,适合初学者和希望巩固Ruby知识的开发者。通过阅读并实践教程中的例子,读者可以逐步掌握Ruby编程,并开启在Ruby世界中的探索之旅。

    Ruby语言入门教程v1.0_ruby语言入门教程_

    本教程“Ruby语言入门教程v1.0”旨在为初学者提供一个通俗易懂的学习路径,帮助他们快速掌握Ruby的基础知识。教程将从Ruby语言的起源和发展讲起,介绍其设计理念和主要特性,使学习者对Ruby有一个全面的认识。 Ruby...

    Ruby语言入门教程

    本教程旨在为初学者提供一个全面的Ruby语言入门指南,帮助他们快速掌握这门语言的基础知识。 首先,Ruby的核心设计理念是“人本主义”,这意味着它强调代码的可读性和程序员的生产力。Ruby的语法清晰,易于理解,...

    Ruby语言入门教程V1.0

    ### Ruby语言入门教程V1.0 #### 一、概述 在《Ruby语言入门教程V1.0》中,作者张开川系统地介绍了Ruby语言的基础知识及其在实际开发中的应用。本教程不仅适合初学者快速掌握Ruby语言的核心概念和技术要点,同时也...

    Ruby语言入门中文教程PDF+源代码.rar

    内容概要:这份资源包括了一份Ruby语言入门的中文教程PDF以及相应的源代码demo。教程将介绍Ruby语言的基础概念、语法特性和常用技巧,而源代码demo则提供了实际的示例代码,帮助读者更好地理解和应用Ruby编程语言。 ...

    RUBY语言入门教程

    ### RUBY语言入门教程知识点概览 #### 一、RUBY简介 - **定义与特点**:RUBY是一种面向对象的脚本语言,简洁而强大,由日本人松本行弘(Yukihiro Matsumoto)在1995年设计并开发。RUBY语言结合了Perl语言的强大功能...

    Ruby语言入门教程v1

    本入门教程“Ruby语言入门教程v1”旨在帮助初学者快速掌握Ruby的基础知识和核心概念,以便能轻松地进行编程。 Ruby的起源: Ruby由日本人松本行弘在1995年创造,其设计目标是强调程序员的生产力和代码的可读性。它...

    ruby语言入门教程

    本"Ruby语言入门教程"是针对初学者精心设计的,旨在帮助新接触编程或者想学习Ruby语言的读者快速上手。 1. **Ruby的基础概念** - 变量:Ruby中的变量分为五种类型,分别是局部变量(以小写字母或下划线开头)、...

Global site tag (gtag.js) - Google Analytics