Ruby

起步

使用irb进入交互式命令行

puts 'hello world'name = 'world'puts "hello #{name}"

编程模型

Ruby 是一门纯面向对象语言

puts 4.class # Integerputs 4.methods

判断

x = 6if x > 5 # singleif  puts 'great than 5'endunless x < 5 # logic not  puts 'great than 5'else  puts 'less than 5'endputs 'hello' if x == 6 # single line ifputs x = x + 1 while x < 10 # single line while

除了nil和false之外 其他值都代表true

puts 'hello' && true # true

ruby的逻辑运算可以为and or 或者 && ||

puts true && false # falseputs true and false # true

类型

Ruby是强类型语言 会对某些操作进行类型检查 Ruby是在运行时才检查

puts 4 + 'hello'

函数

def say_sth  puts 'bark'endsay_sth

数组

list = [1,2,3,4]puts list[0]puts list[-1] # desc order firstputs list[0..-1] # 0-endlist.push(5)puts list.poplist[10] = [1,2,3]

散列表

map = {1 => 'cxk', 2 => 'k'}puts map[1]map = {:string => 'string', :array => 'array'} # symbol 表示一种特殊对象puts map[:string]puts map[:array]

代码块与yield

代码块就是一个匿名函数

3.times {puts 'hello world'} # 传给times一个代码块3.times {|i| puts i} # 传给代码块一个参数i

使用yield实现:

def f  i = 0  while i < 10    i = i + 1    yield  endendf {puts 'ddd'}def condition_yeild  i = 0  while i < 10    i = i + 1    yield if i > 5 # 条件执行  endendcondition_yeild {puts 'ddd'}

class Animal  attr_accessor :name  def initialize(name)    @name = name  endenddog = Animal.new('dog')puts dog.name

method_mission方法 当调用的方法找不到 该方法会被调用

class Man  def self.method_missing name, *args    puts "oh, no such method:${name}"  endendputs Man.go

Mixin

通过混入模块的方式隐式实现一些功能

module Human  def go    puts 'gogogo'  endendclass Person  include Humanendp = Person.newp.go

集合的可枚举 可比较

list = [1,2,3,4,5]puts list.sortputs list.any? {|i| i> 6}puts list.all? {|i| i> 6}puts list.collect {|i| i * 2} # 对每一元素进行此操作puts list.select {|i| i > 2} # 收集符合这个条件的元素puts list.member?(2) # 存在一个2puts list.inject {|sum,i| sum * i} # 求乘积

应用场景

不足