Why Ruby amazes me? PRuby Chap 2 Ruby.new

Gem Gatherer 发表于 2007-10-25 00:40:07

Ruby是彻底的面向对象和大量运用消息的语言。
a = 3.abs
.abs可以视为发给对象3的消息。

最简单的ruby函数
def say(sentence)
  result="Hello, I want to say" + sentence
  return result
end
puts say("Hello World")

句尾不加分号,注释的话句首加#.语法干净。

带实参调用可以加分号也可以不加。
puts say("one")
puts (say("one"))
是一样的。

单双引号的区别
单引号:基本就是引号内的字面值。很少的转义。
双引号:\转义,(用二进制字符串替换,例如\n),#{表达式}字符串内表达式内插(就像printf里面的%d,但是要易用许多)
def say2(name)
  result = "Good day, #{name}" #reby函数的返回值是最后一个被求值的表达式,所以可以省略return了。
end

$Globalvariable:$前缀表示全局变量
@instancevariable:@前缀表示实例变量(类内成员)
@@classvariable:@@前缀表示类变量(类内静态成员)

数组和哈希表:都是利用key访问的对象。
a=[1,'cat',3.14]
a[0]->1,a[2]=nil
a=%w{ant bee cat dog lion} #快速创建字符数组。其等效于:
a=['ant','bee','cat','dog','lion']

建立哈希表:
b= {
'Federer' => 'Roger',
'Nadal' => 'Rafael',
'Roddick' => 'Andy'
}

如果你定义了两个相同的键,前面的就相当于白定义了。
创建空哈希表:hist=Hash.new(0)

控制结构:
if count > 10
...
elsif  count > 5
...
else
...
end

while count < 10 and ...
...
end
while和if将nil作为假值来判断。所以可以这样写。。。
while(line=gets)
...
end

如果if和while体只有一行,可以这样写。。。
put "Great" if score > 90
sq = sq + 2 while sq < 100

简单正则表达式
1. /必须放在开头以及结尾。
2. |表示或 /python|perl/
3. ()表示优先级。/p(ython|perl)/
4. *表示0个或多个/ab*c/
5. +表示一个或多个/3(ab)+/
6. 特殊匹配群字符 \d表示任何数字,\w匹配字母,\s匹配空白字符,  .匹配几乎一切字符

if line=~/Perl/Python/  # =~为匹配正则表达式的符号
  ...
end

line.sub(/Perl/,'Ruby') #替换第一个
line.gsub(/Python/, 'Ruby') #替换所有

block:可以做参数的代码段。许多强大功能的根源。
{ puts "Hello" }
do 
  club.call(me)
  me.go()
end

greet {put "High roof"}
在greet里就可以通过yield来调用这段代码。

block可以带一个或者多个参数

Ruby中也有printf。其语法和c中几乎完全一样。
line=gets
print line

关键词(Tag): ruby


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定