gr8vyguy@Blogjava

Ruby学习笔记1,第一章和第二章

第一章

交互式实验环境启动命令 irb

文件加载的命令 load "filename.rb"

运行一个文件 ruby filename.rb, ruby -w 激活warning

查看帮助文档命令 ri class.method

第二章

注释符号 #

Bool值 
   false和nil为假,其他都为真

实例化
  object = Clazz.new(arguments),new是继承自Object的一个static方法

方法调用
  "str".length        =>   3                  不一定要括号()
  "str".index("r")   =>   2                  index从零开始计数
  -1942.abs        =>   1942            整数也是对象,Ruby没有的primitive数据,都是对象

函数定义
  def add(x, y)
     return x + y
  end
函数的最后一个表达式即是返回值,所以return x + y也可以写成x + y.

变量名
  全局               $global
  实例(field)      @field
  类(static)         @@class_field
  局部               小写字符和下划线开头

字符串
  "Good night, #{name}"    <=>  "Good night, %s", name
  'Good night, #$name'     如果name是全局变量
  "Good night, #@name"    如果name是实例变量

正则表达式
  Pattern以/ /头尾, match操作符 =~
  \s       单个空格字符
  \d       单个数字
  \w      单词中的字符
  .         单个字符
 (|)       两则取一
 "Java python c#" =~ /python/ 返回5
 "Java python c#".sub(/c#/, 'ruby') 返回Java python ruby
 "c# Java c#".gsub(/c#/, 'Java') 返回 Java Java Java

列表
  a = [1, "cat", 3.14]
  a[0] = nil
  a = %w{ ant bee cat } <=> a = [ "ant", "bee", "cat" ]

Hash
  numbers = { "one" => 1, "two" => 2, "three" => 3}
默认的不存在键返回值是nil,可以改变
  hist = Hash.new(0)
  hist["key1"] => 0
  hist["key1"] = hist["key1"] + 1
  hist["key1"] => 1

输出
  puts        自动加上换行符
  print       没有换行符
  printf("Number: %5.2f,\nString: %s\n", 1.23, "hello")

输入
  gets        输入一行,带换行符

控制结构
  if <condition>                           while <condition>
      <statements>                            <statements>            
  elsif <condition>                       end
      <statements>
  else
      <statements>
  end

  puts "Danger, Will Robinson" if radiation > 3000
<=>
  if radiation > 3000
      puts "Danger, Will Robinson"
  end

  square = 2
  square = square * square while square < 1000     # 照样是先判断条件,为true,运行循环

Block是一段匿名的代码或者说是一个匿名的函数,可以用yield调用
  def call_block
    yield("hello", 99)  # 调用block
  end
  call_block { |str, num| puts str + num } # 定义block

需要Block的函数,类似于函数式语言中的High Order函数,他的一个参数是函数。
  animals = %w{ ant bee cat }
  animals.each { |animal| print animal, " " }
  5.times { print '+' }
  3.upto(6) { |i| print i }
  ('a'..'e').each { |c| print c }

并行赋值
  x, y = y, x   # 交换了x和y的值

例子: 计算Fibonacci数

def fib_up_to(max)
  i1, i2 
= 11
  
while i1 <= max
    
yield i1
    i1, i2 
= i2, i1 + i2    
  end
end

fib_up_to(
1000) { |f| print f, " " }

判断一变量名是否定义
  defined?(name)

转载请保留http://www.blogjava.net/xilaile/archive/2007/05/06/115497.html

posted on 2007-05-05 21:54 gr8vyguy 阅读(425) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

公告

  • 转载请注明出处.
  • msn: gr8vyguy at live.com
  • 常用链接

    留言簿(9)

    随笔分类(68)

    随笔档案(80)

    文章分类(1)

    My Open Source Projects

    搜索

    积分与排名

    最新评论