1 ruby 基础知识 ruby.new
ruby 字符串对象的处理:单引号--处理极少 ; 双引号--处理较多。
情况一: 反斜杠 (例如\n)会使用相应的二进制值替换它们。
情况二: #{表达式}替换, 为了方便,如果表达式是 全局实例变量 或者类变量 可以不适用花括号。例如:
@a = "zhang san" //实例变量
$b = "li si" //全局变量
@@c ="zhang wu" //类变量
puts "hello, #@a,\n #$b"
ruby命名惯例:
实例变量 @a 类变量@@a 全局变量$a--------变量的首字母须是小写字母或者下划线
类名className: A 、模块MoudleName:A 和常量 A --------首字母须大写
数组(array)与 散列表(hashes)
a= ["a","b","c"] a[0] => "a"
a= %w{a b c} a[0] => "a" 注: %w{} 使得空格的字符串形成数组
b={"a" => "bert","b" => "dota", "c" => "bobo"} 注:键与值,键(key)是唯一的。
b= Hash.new(0)
ruby的控制结构
大多数ruby语句会返回值,这就意味着可以把它们当做条件使用。例如,gets方法从标准输入流返回下一行,
或者到达文件结束时返回nil。
while line = gets
puts line.downcase
end
如果if或者while语句的程序体只是个表达式,ruby的语句修饰符是一种有用的快捷方式。
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
正则表达式对象
=~ 匹配操作符可以用正则表达式来匹配字符串。如果在字符串中发现了匹配的模式,=~ 返回模式的开始位置,否则返回nil。
if line=~ /perl|python/
puts "scripting language mentioned: #{line}"
end
ruby的匹配替换
line.sub(/perl/,'ruby') #用 'ruby'替换第一个'perl'
line.gsub(/python/,'ruby') #用'ruby'替换所有的'python'
Block和迭代器
block是ruby的独特特性,可以和方法调用相关联的代码块。
处在花括号中或者do...end之间便是block
{puts "hello world" } #this is a block 单行block
do
puts "hello sb" # and so is this 多行block
end
一旦创建了block,就可以与方法的调用相关联。把block的开始放在含有方法调用的源码行的结尾处,就可实现关联。
无参数的方法: greet {puts "Hi" }
有参数的方法: verbose_greet("dave","loa customer") {puts "Hi"}
使用ruby的yield语法 yield 相当于block的关联调用
无参数:def call_block
puts "method start"
yield
yield
puts "method end"
end
call_block {puts "hi"}
有参数:def call_block
yield("hello",99)
end
call_block {|str,mub| ...}
ruby中有大量使用block实现迭代器
ani
mals = %w(ant bee cat bog elk)
animals.each{|n| puts n}
类似的:5.times {print "*"}
3.upto(6) {|i| print i}
('a'..'e').each{|char| print char}
ruby读写文件
ruby有一个完备的I/O库。输出的方法:除了 puts、 print还有printf
printf(“numer:%5.2f,\nString:%s\n”,1.23,"hello")
# 5.2f 替换一个浮点数,最多5个字符,其中2个在小数点后面 和一个字符串
将输入读入
程序中 最传统的方式:使用gets函数
line =gets
print line
2 类、对象和变量
对象可使用 inspect来观察情况 例如:a = Song.new("test","bert") ;puts a.inspect
返回:#
也可以使用to_s来查看 例如:;puts a.to_s
返回:#
类的继承中 super不使用参数时,ruby向当前对象的父类发送一个消息,要求它调用子类中同名方法。换句话说
super 指定去父类里寻找同名的实例方法来执行。
类中定义属性的方法除了常规以外,还采取:
attr_reader :name,:author
attr_writer :name,:author
attr_xx 实际上以我的理解是 mixin 进来个ruby方法
虚拟属性:dutat