[2014年学习计划之RoR系列] 第二步 - 熟悉Ruby语言 (1/n)

在两周的时间里,我开始深入学习Ruby语言,并分享了从安装到基本语法的学习笔记。包括如何运行Ruby,使用RDoc和ri文档,函数定义与调用,命名约定,数组和哈希操作,以及控制结构等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完成第一步之后,打算开始花两周时间,学习Ruby语言。

在网上找了两本教程,先看第一本《Programming Ruby 2nd》这书有个小标题叫做“The Pragmatic Programmers' Guide”。

希望真如它说的实用,不是花哨的大忽悠,偷笑 这里就记录一下学习笔记了。


运行Ruby

安装了Ruby之后,我在Windows Command里边直接敲了'ruby',满心期望会有一个类似Python那样的交互环境,结果不是。看了书才知道

这是一个一次性的输入 - 用户输入结束后按Ctrl + D,ruby就会解释用户的输入。这个不是那么好用,于是换irb,以前用过一个Python的PREL跟irb很相似。

简单明了,这里也不多说了。


RDoc 和 ri

RDoc就是ruby的文档,跟JavaDoc类似,不用赘述。ri我试了一下,发现跟书上写的不太一样,是因为我用的ruby版本比较新吗?这个问题不重要,先放一边了。


函数的定义和调用

def say_goodnight(name)
result = "Good night, " + name
return result
end

# Time for bed...
puts say_goodnight("JohnBoy")
puts say_goodnight("MaryEllen")

这个没什么好说的。begin/end风格的,不需要像Python那样严格对待缩进。


Ruby中的命名约定 - 以首字母区分

局部变量,方法的参数和方法名以小写字母开始;

全局变量是以美元符号($)开始的(有点想念php了);

实例变量用一个"@"符号开始;

类变量用两个"@"符号开始,也就是@@;

类名,模块名和常量以大写字母开始;


注意@之后不可以是数字;

实例变量如果包含多个单词,单词之间用下划线“_”连接;

如果类名包含多个单词,每个单词首字母大写,例如HomeController


数组和哈希 (hashes,或者叫字典)



很高兴看到ruby的数组也是zero-based。书中顺带着提了一下 nil 说是跟其他语言中的null不一样,这个以后再来细究吧。

如果是创建字符串数组,有一个捷径如下图所示:




ruby中的哈希,如下图所示。


inst_section = {
'cello' => 'string',
'clarinet' => 'woodwind',
'drum' => 'percussion',
'oboe' => 'woodwind',
'trumpet' => 'brass',
'violin' => 'string'
}

inst_section['oboe']          ->       "woodwind"
inst_section['cello']           ->       "string"
inst_section['bassoon']   ->        nil


注意如果某一个key不存在,哈希就返回nil。这是ruby哈希的缺省行为,下面的例子将缺省值改为0。

histogram = Hash.new(0)
histogram['key1']       -> 0
histogram['key1'] = histogram['key1'] + 1
histogram['key1']       -> 1


控制结构(Control Structures)

if/else/elsif 和 while,直接看例子吧

if count > 10
puts "Try again"
elsif tries == 3
puts "You lose"
else
puts "Enter a number"
end


while weight < 100 and num_pallets <= 30
pallet = next_pallet()
weight += pallet.weight
num_pallets += 1
end


while line = gets
puts line.downcase
end


statement modifiers (怎么翻译好听呢?) 是ruby中的一种捷径(个人觉得成为语法糖更合适)。如果if/while的条件表达式很简单的时候可以用下面例子的写法,

能够简化/美化代码。


if radiation > 3000

    puts "Danger, Will Robinson"
end

puts "Danger, Will Robinson" if radiation > 3000

square = 2
while square < 1000
    square = square*square
end

square = 2
square = square*square while square < 1000


-------------------------------------------------- 2014-01-06 ------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce Jia(上海)

熬夜码字换酒钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值