现在的位置: 首页 > 综合 > 正文

根据别人ruby总结,自己梳理一下 根据别人ruby总结,自己梳理一下

2018年01月10日 ⁄ 综合 ⁄ 共 2492字 ⁄ 字号 评论关闭

根据别人ruby总结,自己梳理一下

分类:
ruby

40人阅读
评论(0)
收藏
举报

转载地址

http://nottiansyf.javaeye.com/blog/557460

 

ruby class中常用的变量定义方式
局部变量,方法参数,方法名都必须使用小写字母,或者下划线开头
全局变量使用$开头
实例变量使用@开头
类变量使用@@开头

 

initialize 方法,

将会在调用class.new方法时被执行,可以通过new传递参数,应该作用与java过得构造函数一样
可以将传入的变量设置为@,实例变量,这里区别Java的方式,不需要在外部声明一个对象,@符号定义的变量,将会在类实例内部共享访问

 

对实例变量的访问,

默认并不能直接访问@定义的变量,可以通过定义同名方法进行读取
def isbn
@isbn
end
也可以使用简单的 attr_reader属性,用于读取实例变量(只读)
attr_reader :isbn, :price
如果要修改实例变量,可以定义指定格式的方法 =结尾
def price=(new_price)
@price = new_price
end
也可以使用方便的
attr_writer :price
最简单的方式(可读写):
attr_accessor :price

 

Access Control 访问控制
Ruby中一样有public protected,private 三种访问权限
方法默认都是public,除了initialize方法(始终是private)

设置的方式
protected                                  # subsequent methods will be 'protected'
    def method2 # will be 'protected'
        #...
    end
private                                       # subsequent methods will be 'private'
    def method3 # will be 'private'
        #...
    end
public                                         # subsequent methods will be 'public'
    def method4 # so this will be 'public'
        #...
    end

也可以使用统一定义的方式
public :method1, :method4
protected :method2
private :method3

 

将block作为对象使用,在方法定义的参数中,使用&name,对传入的block进行捕获,然后可以赋值给变量使用
def pass_in_block(&action)
    @stored_proc = action
end
调用的时候,使用@stored_proc.call(parameter)

另外一种声明block的方式---lamba
bo = lambda { |param| puts "You called me with #{param}" }
调用的方式一样使用call
bo.call 99

 

closure闭包的实现,使用方法中返回的lamba,达到闭包的效果
def n_times(thing)
    lambda {|n| thing * n }
end
p1 = n_times(23)
p1.call(3) # => 69是

 

如果方法中出现了多个同名的方法,Ruby会有自己一套的策略
如果是继承的父类中拥有多个方法,那个将会使用第一个继承的类
如果是多个导入模块之间存在重复命名的方法,那么将会采用最后一个找到的方法

 

%Q{...},%Q!...!,%q/.../ 也都可以用于包含字符生成字符串,代替"",主要作用是免去/转义,同样可以在里面使用#{}

 

三种创建正则的方式
/pattern/  , Regexp.new("pattern"),%r{mm/dd}

得到模式匹配的内容,
pattern.match("str")进行内容匹配,以数组的形式返回匹配结果

 

 

 


More About Methods
Ruby中比较特殊的方式,使用?,=,!在方法名后进行了定义

当方法返回一个Boolean值时,常用?在结尾进行声明
当方法可能造成危险时,常用!在结尾进行声明
当方法设置值的时候,使用=进行声明

 

可变参数列表
def varargs(arg1, *rest)   //同Python一样,Java中定义的方式 type...args
也可以直接使用(*)设置可变参数

对于处于参数列表中间的*,也会按照参数长度进行自动匹配....

 

异常处理

完整的异常监听
require 'openuri'
page = "podcasts"
file_name = "#{page}.html"
web_page = open("http://pragprog.com/#{page}")
output = File.open(file_name, "w")
begin  //开始监听
    while line = web_page.gets
    output.puts line
  end
  output.close
rescue Exception //catch异常
  STDERR.puts "Failed to download #{page}: #{$!}"
  output.close
  File.delete(file_name)
raise //再次抛出异常
end

简单的方式
begin
    eval string
rescue SyntaxError, NameError => boom //同时捕获多个异常,并进行重命名对象
    print "String doesn't compile: " + boom
rescue StandardError => bang
    print "Error running script: " + bang
ensure  //类似finally
    f.close
end

retry 可以用于在异常后,重新执行begin内的语句

raise ... 用于抛出异常,与throw一样

抱歉!评论已关闭.