Peanut's Book Shelf » 日志 » Why Ruby amazes me? PRuby Chap 2 Ruby.new
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
