(读书笔记一)Ruby.new

听人吵吵好久RUBY了,准备学习一下,翻了翻书(Programming Ruby 1.9,网上下载的)觉得这门语言还挺有意思决定把这个学习计划进行下去,也算为我无聊的生活注入点能量吧。在这里做一点读书笔记,算是对每一张的一个提纲,也有一些自己的思考,可能不成熟或者不对,大家给提提意见吧,也请各位前辈多帮忙小弟。在此先谢谢了。OK,让我们开始吧


我用的Ruby环境是:ruby 1.9.1p430,Windows XP

 

一、Ruby是OOL

 

    在Ruby中,所有的东西都是对象,什么字符串啦、数字啦、数组啦、哈希表、正则表达式、还有符号(Symbol)等等的都是对象。有意思的是nil(类似于C语言中的NULL)也是对象,下面列举了一部分对象的例子,这些例子都是在irb验证的。

 

nil.class  # NilClass

“fuck ass hole".class  # String

100.class  # Fixnum

100000000000000000000000000000000000000.class # Bignum

1.25.class  # Float

/QQ|MSN/.class # Regexp(正则表达式)

[1,2,3,4,5].class  # Array

{"CA" => "California"}.class # Hash

:north.class # Symbol

 

 

二、一些Ruby的简单例子

 

1、方法定义:

def say_hello(name)

   "hello, #{name}"

end

 

    (1)Ruby的方法由def ... end来界定,这跟C语言中用{}来界定不太一样,这种界定方法对我来说不错,因为我讨厌打怪怪的字符。

    (2)def之后是方法名,这里是say_hello,方法名必须用小写且只能是数字、字母、下划线的组合,第一个字符不能是数字。

    (3)括号中是参数列表,可以有任意多个参数,参数由于是Local的,所以必须也要用小写字母。

    (4)如果没写return语句则方法的最后一条语句的值作为方法的返回值。

    (5)在双引号的字符串中,像上边那样把变量放在字符串中就可以把它插入String了

    注意:使用小写字母不是我个人的喜好,这是Ruby这门语言所规定的

 

2、puts

 

puts是Ruby标准库中的一个方法,用来将某些东西输出到一个地方,默认是标准输出

 

puts "Hello, World"

puts say_hello("someone")

 

在调用方法时不一定要加上括号,只不过加上以后看着比较清晰,上边的第二条也可以写成

puts say_hello "someone"

 

3、Ruby的变量

 

Ruby的变量是由字符、数字、下划线组成的,但是要遵循下边一点点小规则,变量名长度任意

 

@var_name                                                        # instance var,以@开头

@@var_name                                                     # class var,以@@开头

$globe_var                                                         # 全局变量以$开头

MyClass,MyModule,MyConstant                      # 类名、模块名、常量名,以大写字母开头

method_name, local_name, para_name            # 方法名、本地变量、方法参数,以小写字母或下划线开头

 

4、Array和Hash

 

可以有两种方法定义Array和Hash

 

Array:

a1 = [1, "cat", 3.15, //]   # Array,literal

a2 = Array.new(10)      # Array,length is 10

当Array的所有元素为String时也可以用一种简写的语法

s = %w[cat dog]等价于s = ["cat", "dog"]

 

b1 = { "cat" => "cat", "dog" => "dog" }    # Hash, literal

b2 = { :cat => "cat",  :dog => "dog" }      # Hash, literal, using Sysmbol

b3 = {cat:"cat",dog:"dog"}                       # 和b2一样,1.9的新语法

b4 = Hash.new(0)                                    # Hash, default value is 0

 

Array和Hash的引用

 

引用Array很简单,类似于C语言中的数组,index从0开始(还有稍微复杂一点的以后再说)

a1[0] => 1

a1[1] => "cat"

a1[2] => 3.15

a1[3] => //

a1[4] => nil  不存在返回nil

 

b1["cat"] => "cat"

b2[:cat] => "cat"

b3[:cat] => "cat"

b4[:animal] => nil   值不存在

 

 

5、符号(Symbol)

     就是用来为某些东西给一个名字,从作用上有点像#define,我们只需要知道其名字而不必关心它的值是多少。

 

     :north

     :east

     :west

     :south

 

     都是Symbol的例子,当引用它们的时候也是用相同的语法,Ruby内部为他们分配值,但是这个值我们不必关心它。

     我们可以在很多地方使用Symbol,比如:

     if direction == :west

       # ... TODO

     end

    

     在上边定义b2的时候就是使用了Symbol,由于使用Symbol定义Hash很普遍,Ruby1.9就有了b3使用的新语法(很像Python的Dict,我很喜欢,还是那个原因^_^)

 

 

6、条件句和循环

 

Ruby支持if条件和while循环,功能和C语言的差不多,只是语法上些许不同,看些例子吧。

 

i = 0

while i < 0

  # TODO

  i += 1

end

 

if x < 0

  # TODO

end

 

上边的例子很好理解吧,就不多说了

 

如果if和while的body只有一条语句,可以用下边类似的写法

 

if x < 0

  puts "x < 0"

end

 

puts "x < 0" if x < 0

 

 

while x < 5

  x += 1

end

 

x += 1 while x < 5

 

在这一部分我遇到了点问题有点不解,用上述类似的语法,我在irb中试验了书里的两个例子,都OK,可是有一个例子不行,不知道为什么。

 

while line = gets

   puts "#{line}"

end

 

puts "#{line}" while line = gets

 

 

7、正则表达式

 

Ruby中内建(built-in)支持正则表达式,同时它也是对象,类型是Regexp

正则表达式在//中界定,比如:/Python|Ruby/

 

=~ 方法将左边的String与右边的正则表达式匹配,如果匹配成功了则返回匹配成功的第一个字符的位置,否则返回nil

 

String类的gsub,sub方法提供根据正则进行查找替换的功能,gsub替换所有匹配的地方,sub一次只替换一次匹配的地方

 

(正则表达式看着怪怪的,感觉挺复杂的,但是貌似很有用,以后再慢慢学习吧)

 

8、Block和迭代器(Iterator)

 

Ruby中的Block其实就是C中用{}界定的代码块,但是Ruby的Block的功能很强大,这里知识简单介绍一下语法,以后有专门的章节说Block

 

首先说语法,Ruby的Block用{}和do...end来界定,且Block只能出现在方法调用之后,例如:

 

[1,2,3,4].each { puts "OK" }

[1,2,3,4].each do

  puts "OK"

end

 

上边的两个例子功能完全一样,都是输出4个OK。按照传统{}用来写单行的Block,do...end用来写多行的Block,至于其他的什么规则实在懒得记,就遵循这一简单的传统吧。

 

NB的是,Ruby的Block还可以带参数,先举几个例子,至于为什么能这样等到专门的那一章的时候再说吧。

 

[4,5,6].each {|value| puts value}   # 分别输出4,5,6

 

 

 

9、输入和输出

 

Ruby有很多的输入输出的方法,这里就简单介绍几个

 

puts上边已经介绍过了,它是用来输出puts的参数,然后加一个换行

print和puts一样只不过没有换行

printf和C中的printf类似

 

gets用来从终端读取输入,如果遇到EOF返回nil,所以它可以用在if和while中

 

while line = gets

  puts line

end

 

10、命令行参数

 

当从命令行执行Ruby脚本的时侯

 

# ruby script.rb para1 para2 para3

 

ARGV(Array)包含所有的命令行参数

上个例子中则是["para1","para2","para3"]

ARGV.size代表命令行参数的个数,这个例子里是3

 

要注意的是,ARGV不包含ruby,script.rb,这和C语言是不一样的,C语言将程序本身作为第一个参数。

 

书上还有ARGF那段,没看懂。。。。

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值