ruby中的retry和redo】的更多相关文章

# retry用于处理异常中的begin/end代码块中,如果发生异常会重新运行 begin 和 rescue 之间的代码#当retry 被调用的话,begin 和 rescue 之间所有的代码都会被重新跑一次,并不会只跑片段代码或只跑发生异常的代码(0..5).each do |i| begin puts i raise 'error' if i ==2 rescue puts "error i=100" i=100 retry endend # output result 012e…
我们时常会与操作系统交互或在 Ruby 中执行 Shell 命令.Ruby为我们提供了完成该任务的诸多方法. Exec Kernel#exec 通过执行给定的命令来替换当前进程,例如: $ irb >> exec 'echo "hello $HOSTNAME"' hello codefun $ 注意 exec 利用 echo 命令替换了 irb 进程,然后退出.因为 Ruby 实际上结束了该方法,所以只能有限使用.该方法的缺点是,你无法从 Ruby 脚本中知道命令是执行成功…
Ruby中的类变量,很多文章都是不太建议使用的,主要原因在于他的一些特性容易导致犯一些错误,尤其在广泛使用元编程的时候. 初步接触类变量可能觉得他跟C++的类静态成员和Java中的静态变量没什么区别,但在实际使用中一不留神就会掉到类变量的陷阱中去 陷阱1,类变量跟类实例变量不同,类实例变量关联的是self,但类变量关联的是当前类作用域 class C end class D end class C @@var = "C" def D.getvar @@var end end class…
原文出处:Understanding Ruby Blocks, Procs and Lambdas blocks,Procs和lambda(在编程领域被称为闭包)是Ruby中很强大的特性,也是最容易引起误解的特性. 这有可能是因为Ruby使用相当独特的方式来处理闭包.Ruby有四种处理闭包的方式,每一种方式都稍有点不同,甚至有点荒诞,这使得事情变得有点复杂.有不少网站提供了一些关于Ruby闭包的工作方式,但是我还没有找到一个非常有效的指南,希望本篇文章会成为这样的一篇指南. 一.首先来说bloc…
作用域对于Ruby以及其它编程语言都是一个需要理解的至关重要的基础知识.在我刚开始学习ruby的时候遇到很多诸如变量未定义.变量没有正确赋值之类的问题,归根结底是因为自己对于ruby作用域的了解不够,但在你看看完我的这篇文章后,相信你不会再担心会遇到这些头疼的问题. 什么是作用域? 当谈论到作用域的时候,应该马上想到变量和可见性这两个词,变量和可见性是作用域的主要内容,没错,作用域就是关于在代码的什么地方什么变量是可见的,当你充分了解了作用域后,给你一段代码,你可以轻易知道此时什么变量是可见的,…
#Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#%Q #用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") puts %Q(1.Joe said: "Frank said: "#{what_frank_said}"") #“#”不能省 =…
=begin Ruby中 使用Xml Markup 轻松的对XML文档操作, 项目地址:http://builder.rubyforge.org/ 使用之前我们需要安装Builder xml markup 前置条件 您的机器已经安装了RubyGems(Windows平台的一步安装文件RubyRubyInstaller.exe(我机器是RubyInstaller-1.9.3-p194),安装完毕系统就自带RubyGems) Windows系统: 在命令行输入: gem install builde…
Block Blocks就是存放一些可以被执行的代码的块,通常用do...end 或者 {}表示 例如: [1, 2, 3].each do |num| puts num end [1, 2, 3].each { |num| puts num } Blocks可以和.each..times等联合使用,用来对每一个元素执行一段指令. 还有很多非常有用的方法需要用到Blocks,例如 collect collect方法可把数组中的每个元素都传给Blocks, 在Blocks中可对数组元素进行操作 例…
Symbol 是什么 Ruby 是一个强大的面向对象脚本语言(本文所用 Ruby 版本为1.8.6),在 Ruby 中 Symbol 表示“名字”,比如字符串的名字,标识符的名字. 创建一个 Symbol 对象的方法是在名字或者字符串前面加上冒号: 创建 symbol 对象 :foo :test :”abc” :”I am a boy” 你可能会问,字符串就是字符串,干吗还有字符串的名字?这是因为在 Ruby 中字符串也是一种对象,即 String 对象.无论其结构还是操作和 Symbol 对象…
1.类名的定义以大写字母开头,单词首字母大写,不用"_"分隔 2.实例化对象的时候调用new方法,实际上调用的是类里边的initialize方法,是ruby类的初始化方法,功能等同于Java中的构造方法 class Person def initialize(name, gender, age) @name = name @gender = gender @age = age end end 3.可以使用attr_accessor关键字标记实例变量,为其提供读写方法,类似java中的g…
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在ruby中对于字符串类型我们可以用乘法生成一个指定数量重复的字符串: irb(main):002:0> money = "9" => "9" irb(main):003:0> money * 99 => "99999999999999999999999999999999999999999…
ruby中顶层(top level)中定义的方法放在main中,证明如下: self.private_methods(false) #IN TOP LEVEL 那么methods方法究竟是在哪定义的,书上说是在Object中,但在ruby1.9.2p290中是在Kernel中定义的,证明如下: Kernel.public_instance_methods(false)…
先看一下ruby中printf "%x" % -4的返回结果: irb(main):134:0> printf "%x\n" % -4 ..fc 前面的..是神马东东???看了matz的文章略知了一二. 在ruby中如果是x86则Fixnum是32位,如果是x64则Fixnum是64位,超过长度的数字会变为Bignum.在Bignum内部,分别保存符号和绝对值,绝对值以整数数组形式存放,数组的元素是若干32位无符号整数.而Bignum符号另外保存,与Fixnu…
我们知道ruby通过C EXT可以很方便的运行C代码,其实只要是C接口的语言都可以,比如汇编语言也可以哦.但是一些简单的函数难道还得费劲用C扩展的方式吗?其实ruby gem里有RubyInline包,通过它可以在ruby源代码里写C代码,然后调用执行啊! 直接用 gem install RubyInline 安装吧!我们测试一下: require 'inline' class A inline do |b| b.include '<stdio.h>' b.flags=["-std=…
如果ruby中一个局部变量名和私有方法名同名的话,默认该名称被解释为变量而不是方法: x=10; def x;puts "what?" end 当你输入x实际不能执行x方法.解释器只把x解释为变量.而且undef只能对方法而不能对变量下手,所以undef x仍然不行,变量还在那里!一种解决方法是将x方法转换为一个method,然后调用: x_f = method(:x) x_f[] 或者还有一种方法,就是方法别名!你可以指定x的一个别名,这时x肯定会解释为方法: alias new_x…
Ruby中如何复制对象 (deep clone) 用Ruby复制一个对象(object)也许没有你想像的那么容易. 今天我google了半天, 做个总结吧. 先从最简单的开始, b = a 是复制吗? 看代码说话: a= [0,[1,2]] b=a b[0]=88 b[1][0]=99 b => [88, [99, 2]] a => [88, [99, 2]] 从上面代码发现, 一但修改b, 原来的a也同时被改变了. 甚至: b.equal?(a) => true 原来b跟a根本就是同一…
Ruby中的方法命名遵从与局部变量相同的规则和约定.这是一种设计理念:方法并不因其自身作为方法而被人关注,而是简单地作为提供值的表达式融入到程序的结构中.…
[编者按]本文作者为 Pierpaolo Frasa,文章通过详细的案例,介绍了在Ruby中编写微服务时所需注意的方方面面.系国内 ITOM 管理平台 OneAPM 编译呈现. 最近,大家都认为应当采用微服务架构.但是,又有多少相关教程呢?我们来看看这篇关于用Ruby编写微服务的文章吧. 人人都在讨论微服务,但我至今也没见过几篇有关用Ruby编写微服务的.像样的教程.这可能是因为许多Ruby开发人员仍然最喜欢Rails架构(这没什么不好,Rails本身也没什么不好,但是Ruby可以做到的事还有很…
ruby中的alias和alias_method都可以重命名一个方法,它们的区别如下: 1.alias是ruby的一个关键字,因此使用的时候是alias :newname :oldname alias_method是Module类的一个方法,因此使用的时候是alias_method :newname,:oldname,有一个逗号. 2.alias的参数可以使用函数名或者符号,不能是字符串. alias_method的参数可以是字符串,或者符号. 如下代码: class Array alias :…
ruby中的win32ole是一个标准库,使用的时候只要添加require 'win32ole'就行. 下面是一段模拟一个登陆的代码 require 'win32ole' ie = WIN32OLE.new('internetExplorer.application') ie.visible = true ie.navigate('www.***.cn') sleep(0.2) until ie.busy == false ie.Document.getElementById('loginId'…
在ruby中,**是乘方的意思.它是一个右结合性的运算.如下: 在多个乘方的时候,会先进行后面的乘方运算,结果作为指数再与前一位进行乘方运算.…
在ruby中,当某些特定的事件发生时,将调用回调方法和钩子方法.事件有如下几种: 调用一个不存在的对象方法 类混含一个模块 定义类的子类 给类添加一个实例方法 给对象添加一个单例方法 引用一个不存在的常量 对以上的事件,都可以为之编写一个回调方法,当该事件发生时,这个回调方法被执行.这些回调方法是针对某个对象,或者某个类的,而不是全局的. 下面给出一些例子: 1 Method_missing拦截不能识别的消息 在前面说过,根据对象模型来进行方法查找,如果没有找到,会抛出一个NoMethodErr…
Ruby中区分运行来源的方法 这篇文章主要介绍了Ruby中区分运行来源的方法,本文讲解的是类似Python中的if name == 'main':效果,其实Ruby中也有类似语法,需要的朋友可以参考下 当我们在写模块的时候,或多或少需要直接运行这个文件也可以执行一些方法,但是这样对于当这个模块被require或者include时,显得不好,在ruby里,有没有区分运行来自当前文件,还是被require的目标文件调用呢? Python可以 比如像Python这样 if __name__ == '_…
上一篇讲了ruby中的可调用对象proc和lambda,他们都是块转换成的对象.ruby中的可调用对象还有方法.通过使用method方法,并且以方法名作为参数(字符串或者符号),就可以得到一个方法对象. 如下: class C def talk p "hello world" end end c = C.new meth = c.method :talk meth.call 输出: "hello world" 类C有个实例方法talk.类C的实例c调用方法metho…
ruby中将块转变成对象的三种方法 ruby中的大部分东西都是对象,但是块不是.那么,如果你想存下来一个块,方便以后使用,你就需要一个对象.ruby中有三种方法,把块转换成可以利用的对象. Proc.new lambda          #kernel的方法 proc  #等价于Proc.new 这三种很类似,如下: inc = Proc.new{|x|x+1} p inc.call(1) inc = proc{|x|x+1} p inc.call(1) dec = lambda{|x|x-1…
ruby中的方法调用都是 对象.方法 的形式,那么对象如何找到这个方法呢? 首先必须了解祖先链的概念,祖先链就是从一个类开始,到它的父类,再到父类的父类...一直到最终的起点(ruby中是BasicObject类).这期间经历过的路径就是祖先链. 1混含模块和继承的方法查找 对于一个实例对象,先找它属于的类中是否有对应的实例方法,然后看这个类中是否有模块,如果有,查找模块中是否有对应的方法,如果没有,则查找父类.先看父类的实例方法,再看父类中是否有模块,再看父类的父类..一直到最后,BasicO…
在ruby中写顶层函数的时候,总会有一个问题,self是谁,这些方法是谁的,是什么方法. 如下: p self p self.class def talk p self end talk 输出main,Object,main 由此可见,在写顶层代码的时候,ruby自动提供了一个默认的self,它是Object类的实例对象,main. 那么这个方法talk是属于谁呢?虽然它当前的self是main. 通过特殊的规定(就是规定的.参考ruby for rails中文版153页),顶层方法是Objec…
ruby中的私有方法是指方法只能被隐含调用,不能被显示调用.而当没有显示接收者的时候,会把self当成接收者.因此,只能在自身中调用私有方法,这也是私有方法的调用规则. ruby的私有方法机制目的是:使得你很容易将方法分为两种,外部世界可以访问的方法和外部世界不可以访问的方法. 如下: class A def a self.method end def method p "hello world" end private :method end A.new.a method定义成私有方…
作用域(scope)指的是变量的可达性或可见性.不同类型的变量有不同的作用域规则.与self类似,作用域在程序的执行过程中也在不断的变化,也可以根据上下文推断出"谁在什么作用域中".但是,self和作用域不是同一个东西,在self没有变化的时候,可以开始一个新的局部作用域,有时候,作用域和self一起改变. 全局作用域和全局变量:全局变量最不常用,但需要了解.全局变量用$开始,在整个程序的任何位置都可以访问,穿过所有的边界. 局部作用域:在任意时刻,程序都处在一个特定的局部作用域中.两…
先看一道题,这道题是codewars上的一道题,我很早就看到了,但是不会写.等到又看到这道题的时候,我刚看完元编程那本书,觉得是可以搞定它的时候了.废话不多说,先看这道题,题目最开始是为JavaScript写的,但是也放在了ruby语言里面,这个没有关系.题目内容是有一个类Calc,通过链式方法调用,可以实现加减乘除.如图给的四个例子.数字只有0-9,运算只有加减乘除,而且每个运算只有一个操作符.(可以先不看下面,自己先想一下怎么写) 首先,每一个例子都是同样的结构---类名和四个方法.拿第一个…