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

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

2018年04月19日 ⁄ 综合 ⁄ 共 2439字 ⁄ 字号 评论关闭

转载地址

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一样

【上篇】
【下篇】

抱歉!评论已关闭.