`
zarknight
  • 浏览: 146465 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby Way第一章学习记录[总览]

阅读更多

        不少人都对rails感兴趣,我也是,不过我不急着用,所以不直接去学习rails,而想先稳当一点先把Ruby大致过一遍,熟悉下Ruby的特性。

       

变量命名规则:

======================================================

局部变量--以小写字母或下划线_开头,如:alpha, _ident, some_var

全局变量--以$开头,如:$beta, $B12vitamin, $NOT_CONST

实例变量--以@开头,如:@foobar, @thx1138, @NOT_CONST

类变量-----以@@开头,如:@@phydeaux, @@my_var, @@NOT_CONST

常量--------以大写字母开头,如:K6chip, Length, LENGTH


注释

===============================================================

以#开头,如:

a = 1 + 2 #注释部分...

#又是注释部分...

print "# 这里不是注释部分"


嵌入式文档(可用RDTOOL生成文档)

=======================================================

以=begin开头,以=end结尾,如:

=begin

this part  is the embbed document.

hello,ruby!

=end


字符串

======================================================

可以用双引号和单引号,如:

"hello,world!"

'hello,every one!'

两者不同点:

1.双引号可以解释所有支持的转义字符,如:

"hello,\t world!\n"

单引号则只能支持两种:\\和\'

'hello,\\ world!'

2.双引号中可以嵌入变量或表达式并计算,如:

myname = "zarknight"
"hello,#{ myname}!"    #结果为hello,zarknight!

"The sum is #{ 1+2+3} ."

而单引号则会当作普通字符来处理。

一般情况下,嵌入的变量或表达式需要以#为前缀,包含在括号内,如:#{abc},但如果是以$或@开头的变量,可以省略括号,如#$abc


%q和%Q是广义的单引号和双引号,可以这样使用:

%q{ We can embed \\ and \} in this string.}

%Q("Hello, #{ name} ," I said to her.)


============================================================

``(反引号)或%x可以执行系统命令,如:

·grep i meta *.html | wc l·

%x[grep i meta *.html | wc l]


============================================================

ruby中的正则表达式示例如下:

/^[a-zA-Z]*$/

%r{^[a-zA-Z]}


============================================================

Ruby的数组:

数组可以包含任意类型的元素,包括混合类型的元素,用法如下:

[1, 2, 3]
[1, 2, "buckle my shoe"]
[1, 2, [3,4], 5]


["alpha", "beta", "gamma", "delta"]

可以用%w方便的生成字符串数组(前提是目标字符串中没有空格,否则,生成出来的就和你的意愿不一样了),如:

%w{aaa bbb ccc ddd}


============================================================
Ruby的hash,也称联合数组或字典,用法如下:
{ 1=>1, 2=>4, 3=>9, 4=>16, 5=>25, 6=>36 }
{ "cat"=>"cats", "ox"=>"oxen", "bacterium"=>"bacteria" }
{ "hydrogen"=>1, "helium"=>2, "carbon"=>12 }
{ "odds"=>[1,3,5,7], "evens"=>[2,4,6,8]}
{"foo"=>123, [4,5,6]=>"my array", "867-5309"=>"Jenny" }

============================================================


 
循环与分支
============================================================
if x < 5 then
    statement1
end

等价形式:
unless x >= 5 then
    statement1
end

也可以这样写:
statement1 if x < 5

还可以这样做赋值:
x = if x < 5 then a else b end


Ruby的case与语句示例:
case x
    when "hello"
       puts "oper one"
    when "world"
       puts "oper two"
    else
       puts "other oper"
end

循环的用法有很多种:
# while循环
i=0
while i < list.size do
print "#{ list[i]} "
i += 1
end

# until循环
i=0
until i == list.size do
print "#{ list[i]} "
i += 1
end

# post-test while(即先执行一次循环体再做判断的while循环)
i=0
begin
print "#{ list[i]} "
i += 1
end while i < list.size

# post-test until(即先执行一次循环体再做判断的until循环)
i=0
begin
print "#{ list[i]} "
i += 1
end until i == list.size

# for循环
for x in list do
print "#{ x} "
end

# 'each' 迭代器
list.each do |x|
print "#{ x} "
end

# 'loop' 方法
i=0
n=list.size-1
loop do
print "#{ list[i]} "
i += 1
break if i > n
end

# 'times' 迭代器
n=list.size
n.times do |i|
print "#{ list[i]} "
end

# 'upto' 迭代器
n=list.size-1
0.upto(n) do |i|
print "#{ list[i]} "
end

# for循环2
n=list.size-1
for i in 0..n do
print "#{ list[i]} "
end

# 'each_index'迭代器
list.each_index do |x|
print "#{ list[x]} "
end
===========================================================
Ruby的block机制
示例一:
def repeate_test(condition)
    yeild
    retry if not condition
end

j=0
repeat_test (j < 10) do {
    j+=1;
    print j,"\n"
}

实例二:
def my_sequence
for i in 1..10 do
yield i
end
end

my_sequence { |x| print x**3, "\n"}


==========================================================
Ruby的异常处理机制:
使用raise抛异常(rails不是关键子,是Kernel模块的一个方法,它还有个别名fail),用法:
raise                                           # Example 1
raise "Some error message." # Example 2
raise ArgumentError # Example 3
raise ArgumentError, "Invalid data." # Example 4
raise ArgumentError.new("Invalid data.") # Example 5

使用rescue(相当与java中的catch)处理异常:
begin
x = Math.sqrt(y/z)
# ...
rescue ArgumentError
print "Error taking square root.\n"
rescue ZeroDivisionError
print "Attempted division by zero.\n"



begin
x = Math.sqrt(y/z)
# ...
rescue => err
print err, "\n"
end

end

raise ArgumentError, "Invalid data.", caller[0]


retry关键字可以用来重新执行begin开始的语句。
使用ensure(相当与java中的finally)来善后:
begin
     # Error-prone code...
    rescue
        # Handle exceptions
    ensure
        # This code is always executed
end 


 

 

分享到:
评论

相关推荐

    The Ruby Way(第2版)

    The Ruby Way(第2版) &lt;br&gt;The Ruby Way assumes that the reader is already familiar with the subject matter. Using many code samples it focuses on "how-to use Ruby" for specific applications, either ...

    The Ruby Way--3rd Edition--2015-英文版

    The Ruby Way 第三版(英文版),全书22章,书中包含600多个按主题分类的示例。每个示例都回答了“如何使用Ruby来完成”的问题。 ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!

    ruby学习资源(Programming Ruby, Learning Ruby, The Ruby Way)

    内含以下4个文档: 1、Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.chm 2、O'Reilly.Learning.Ruby.May.2007.chm 3、Programming Ruby 2e.pdf 4、ruby中文文档.chm

    THE RUBY WAY(中文版)(第二版)pdf

    《The Ruby Way 第二版》...“《The Ruby Way (第2版)中文版》在阐述元编程(metaprogramming)等方面尤其出类拔萃,而元编程是Ruby最引人注目的方面之一。” ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!

    the-ruby-way

    the ruby way the ruby way

    the ruby way 2ed

    the ruby way 2ed. the ruby way 2ed.

    ruby笔记1ruby笔记1ruby笔记1

    ruby笔记1ruby笔记1ruby笔记1ruby笔记1ruby笔记1ruby笔记1

    Ruby学习笔记

    这个暑假回家没事干闲的蛋疼,正好手头有一本《七周七语言》,然后就开始从Ruby学起,到scala结束。中间的Io和prolog就被华丽丽的跳过了,因为prolog语法太奇葩,Io有没什么好的资料可以看,尽管我觉的Io应该会是一...

    学习Ruby的笔记以及Demo源码.zip

    学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及...

    the ruby way

    the ruby way 是一本学习ruby绝好的教材,才用了"如何解决问题"的方式说明ruby编程.

    ruby学习笔记

    ruby基础笔记,自学笔记,ruby基础语法非常全面ruby基础笔记,自学笔记,ruby基础语法非常全面

    《Ruby on Rails Web开发学习实录》

    Ruby on Rails Web开发学习实录 内容简介: 在目前的主流web开发技术中,基于ruby语言的rails框架是做网站开发速度最快的工具。它可以达到j2ee框架开发速度的5~10倍,并且代码量也非常少。另外由于代码量的大幅度...

    Ruby-Ruby中机器学习的实用资源

    Ruby中机器学习的实用资源

    11.5 时间日期the ruby way.rar

    11.5 时间日期the ruby way.rar

    Ruby学习笔记(学习心得)

    Ruby学习笔记 01 类的属性与方法 02 访问控制 03 Container(Array/Hash) 04 Iterator 05 简单数据类型 06 范围 07 方法 08 条件控制 09 异常处理

    the ruby way (2nd Edition)

    TheRubyWay(Ruby之道)英文版 Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.pdf

    Ruby基础学习资料

    Ruby基础学习资料:Ruby介绍,环境配置,Ruby语法。

    The ruby way

    the ruby way,ruby 入门经典

    ruby笔记3ruby笔记3ruby笔记3

    ruby笔记3ruby笔记3ruby笔记3ruby笔记3ruby笔记3ruby笔记3

    ruby笔记2ruby笔记2ruby笔记2

    ruby笔记2ruby笔记2ruby笔记2ruby笔记2ruby笔记2

Global site tag (gtag.js) - Google Analytics