随笔分类 -  ruby

ruby 除法运算
摘要:在Ruby中根据运算对象的值的不同进行不同的操作。除法运算符"/"的两边同为Interger对象时运算符进行整除运算,其中任意一方为Float对象时进行实数的除法运算。 7 / 2 #=> 3 整除 7.0 / 2 #=> 3.5 除法计算 阅读全文

posted @ 2016-04-25 17:10 tim_sheng 阅读(2430) 评论(0) 推荐(0)

rspec+rest-client测试第三方web service
摘要:如果你手工测试Restful 服务将会是一件非常单调乏味的事情。当然,目前有一些浏览器插件可以通过可视化的界面帮助你手工测试,例如postman、rest console,但是每次系统版本更新,你都需要去手动执行大量的测试,显然这种方式不是非常实用。Ruby拥有许多出色的gem包,你可以使用它们完成... 阅读全文

posted @ 2015-03-12 17:32 tim_sheng 阅读(1066) 评论(0) 推荐(0)

ruby类名之间<,<=方法
摘要:有时候看源码的时候看到类名之间存在,:<,:<=]e.gmod < other → true, false, or nilReturns true ifmodis a subclass ofother. Returnsnilif there’s no relationship between the... 阅读全文

posted @ 2014-09-23 17:25 tim_sheng 阅读(417) 评论(0) 推荐(0)

ruby--变量/方法二义性
摘要:在表达式中,当Ruby看到像a这样的名字时,它需要判断a是一个局部变量引用还是对没有参数的方法a的调用。Ruby使用一种启发式的方法来判断这种情况。当Ruby解析源代码文件时,它会记录所有已经被赋值的符号。它认为这些符号是变量。以后当遇到一个既可以是变量又可以是方法调用的符号时,Ruby会检查是否已经对该符号进行了赋值。如果是,那么把该符号当作变量,否则当作方法调用。下面是描述这种情况的一个人为设计的例子。def a print "Funciton 'a' called\n" 99endfor i in 1..2 if i ==2 print "a 阅读全文

posted @ 2013-05-06 21:25 tim_sheng 阅读(281) 评论(0) 推荐(0)

ruby--$:.unshift File.expand_path('..', __FILE__)
摘要:一直能看到一些gem里面会有这样一句代码:$:.unshift File.expand_path('..', __FILE__)这句话是干什么用的呢$:就是ruby的一个全局变量,也叫$LOAD_PATH,功能就是java中的classpath,用来加载类库的,当你require某个文件时,ruby就会从这个变量的值去查找,找不到会报LoadError。这个值其实就是一个包含了类库绝对路径的数组。__FILE__这个变量代表文件自己的文件名,在foo.rb中puts__FILE__,结果就是foo.rb。File.expand_path可以把路径转换成绝对路径,假设有这样一个文 阅读全文

posted @ 2013-04-13 11:38 tim_sheng 阅读(3209) 评论(0) 推荐(1)

ruby--require引用文件路径方法与问题总结
摘要:同一目录下的文件,如/usr/local/ruby/foo.rb与/usr/local/ruby/bar.rb两个文件。如果直接在foo.rb中require 'bar'执行时会报找不到bar.rb错误。这是因为运行/home/oldsong$ ruby /usr/local/ruby/foo.rb时会在ruby安装的lib目录和/home/oldsong/目录下查找bar.rb。而不会去rb文件的目录/usr/local/ruby/下查找。所以除引用系统rb外,require中不能用相对路径。下面结合我个人经验介绍几种引用单个和目录下所有rb的方法。1、引用一个文件例: 引用 阅读全文

posted @ 2013-04-08 11:28 tim_sheng 阅读(8247) 评论(0) 推荐(0)

ruby--循环
摘要:当使用while和until做语句修饰符时,有一点需要注意:如果被修饰的语句时一个begin/end块,那么不管布尔表达式的值是什么,块内的代码至少会执行一次。print "Hello\n" while falsebegin print "Goodbye\n"end while false 输出结果:Goodbye 阅读全文

posted @ 2013-03-28 18:31 tim_sheng 阅读(220) 评论(0) 推荐(0)

ruby--赋值
摘要:在老版本的Ruby中,赋值语句的返回值是设置该属性的方法的返回值。在Ruby1.8中,赋值语句的值总是参数的值而方法的返回值将被丢掉。class Test def val=(val) @val = val return 99 end endt = Test.newa = t.val=2a ->2 在老版本中,a将被赋值语句设置为99,而在Ruby1.8中,它的值为2.Ruby的赋值实际是以并行方式执行的,所以赋值语句右边的值不受赋值语句本身的影响。在左边的任意一个变量或者属性被赋值之前,右边的值按它们出现... 阅读全文

posted @ 2013-03-25 18:10 tim_sheng 阅读(2055) 评论(0) 推荐(0)

ruby--调用方法
摘要:def meth_three 100.times do |num| square = num*num return num, square if square>1000 end endmeth_three ->[32,1024]这种方法显示,如果你给return多个参数,方法会将它们以数组的形式返回。你可以使用并行赋值来收集返回值。 当你调用一个方法时,你可以分解一个数组,这样每个成员都被视为单独的参数。在数组参数(必须在所有普通参数的后面)前加一个星号可以完成这一点。 阅读全文

posted @ 2013-03-22 18:43 tim_sheng 阅读(357) 评论(0) 推荐(0)

ruby--定义一个方法
摘要:def aaa############endruby的方法体内是普通的Ruby表达式,你不能在方法体内定义非单件类或模块。如果你在一个方法内定义另一个方法,内部的方法只有在外部方法执行时才得到定义。方法的返回值是执行的最后一个表达式的值,或者return表达式显示返回的值如果你希望传入可变个数的参数、或者想用一个形参接收多个参数,在"普通"的参数名前放置一个星号(*)即可。def varargs(arg1,*rest) "Got #{arg1} and #{rest.join(',')}"endvarargs("one" 阅读全文

posted @ 2013-03-22 14:59 tim_sheng 阅读(1280) 评论(0) 推荐(0)

Ruby--instance_variable_get(@xx)
摘要:instance_variable_get(var)ruby 1.8 特性取得并返回对象的实例变量的值.可以使用字符串或者Symbol来向var指定实例变量名.若实例变量尚未定义,则返回nil.class Foo def initialize @foo = 1 endendobj = Foo.newp obj.instance_variable_get("@foo") # => 1p obj.instance_variable_get(:@foo) # => 1p obj.instance_variable_get(:@bar) # => nilinsta 阅读全文

posted @ 2013-02-13 00:20 tim_sheng 阅读(1967) 评论(0) 推荐(0)

ruby符号的应用
摘要:$!: 最近一次错误信息$?: 最近一次执行的子进程退出的状况$$:: 解释器进程ID$*: 命令行参数$0: Ruby当前运行程序的文件名$\: 输出记录分隔符$/: 输入记录分隔符$=: 是否区分大小写标志$n: 最近匹配的第n个子表达式$~: 自表达式组的最近一次匹配$&: 最近一次同正则表达式匹配的字符串$.: 解释器最近读的行数$_: gets最近读取的字符串$@: 错误产生的位置 阅读全文

posted @ 2013-01-19 22:27 tim_sheng 阅读(183) 评论(0) 推荐(0)

Ruby--require 加载文件
摘要:加载文件时需要:require ‘file’但是加载这个文件前需要有个上下文环境,如:$:.unshift(File.expand_path(File.join(File.dirname(__FILE__),’..’,’file’)))require 如果返回true,说明成功读取了新的功能加载路径,就是默认ruby启动的时候会在这些路径里去寻找可以加载的类库。ruby加载路径放在一个变量$LOAD_PATH($:)里。函数解释:File.dirname(__FILE__) 得到当前文件的路径File.join(‘x’,’y’,’z’) 相当于x/y/zFile.expand_path( 阅读全文

posted @ 2013-01-17 22:54 tim_sheng 阅读(406) 评论(0) 推荐(0)

散列
摘要:在方法调用上可以把散列作为参数。Ruby允许省略花括号,但前提是散列是方法调用的最后一个参数。在Rails中该功能得到广泛应用。下面代码片段演示了如何将具有两个元素的散列传递给方法redirect_to。从实际效果来看,可以认为它不是散列,并且假装Ruby具有关键字参数。redirect_to :action => 'show', :id => product.id 阅读全文

posted @ 2012-12-13 09:12 tim_sheng 阅读(222) 评论(0) 推荐(0)

ruby 方法查找 and执行方法
摘要:当调用一个方法时,Ruby会做两件事。1.找到这个方法。这个方法称为方法查找。2.执行这个方法。为了做到这点,Ruby需要一个叫做self的东西。这样的一个过程--发现一个方法再执行之--在每种面向对象语言中都会发生。不过,对于像Ruby这样非常动态的语言,深入理解这个过程显得尤为重要。你有没有好奇过一个方法究竟定义在哪里呢?如果有,那绝对应该深入理解方法查找及self。当调用一个方法时,Ruby会在对象的类中查找那个方法。不过,在给出更复杂的例子之前,你需要了解两个新概念:接收者(receiver)和祖先链(ancetors chain)。接收者就是你调用方法所在的对象。例如,在my_str 阅读全文

posted @ 2012-11-14 18:12 tim_sheng 阅读(649) 评论(0) 推荐(0)

Ruby 模块
摘要:模块与类很相似,它也可以说成是“不能被实例化的类”。由于Class类是Module类的子类,所以说成是“类=模块+实例化能力”也许更好。所谓模块,究竟是用来干什么的呢?其作用主要有两大类:Mix-in和命名空间。Mix-in实际上是受限制的多重继承。利用实际做成的继承关系,可以实现对某些类进行一些“点缀”的目的。事实上,Mix-in这种说法就来自于在冰激凌上面的饼干或者坚果。在面向对象设计的历史中,由多重继承机制造成的问题早已众所周知了。所以,很多现代的面向对象设计语言都只支持单一继承的方式。Ruby就是采用的这种方式。但是,多重继承机制也有不能被割舍的魅力。因此Ruby通过采用Mix-in的 阅读全文

posted @ 2012-11-06 15:14 tim_sheng 阅读(661) 评论(0) 推荐(0)

Ruby 实现迭代器
摘要:Ruby的迭代器只不过是可以调用block的方法而已。Ruby的block不是传统意义上的、将语句组织在一起的一种方式。首先,block在代码中只和方法调用一起出现:block和方法调用的最后一个参数处于同一行,并紧跟在其后(或者参数列表的右括号的后面)。其次,在遇到block的时候并不立刻执行其中的代码。Ruby会记住block出现时的上下文(局部变量、当前对象等)然后执行方法调用。在方法内部,block可以像方法一样被yield语句调用。每执行一次yield,就会调用block中的代码。当block执行结束时,控制返回到紧随yield之后的那条语句。我们来看个简单的例子.def three 阅读全文

posted @ 2012-07-19 23:01 tim_sheng 阅读(747) 评论(0) 推荐(0)

Ruby容器
摘要:所谓容器是指含有一个或多个对象引用的对象。在开始实现之前,我们需要决定如何在SongList对象中存储歌曲列表。目前有3个明显的选择:(1)使用Ruby的Array(数组);(2)使用Ruby的Hash(散列表);(3)自定义列表结构。数组类含有一组对象引用。每个对象引用占据数组中的一个位置,并由一个非负的整数索引来标识。可以通过使用字面量(literal),或显示地创建Array对象,来创建数组。字面量数组(literal array)只不过是处于方括号中的一组对象。a = [3.14159, "pie", 99]a.class ... 阅读全文

posted @ 2012-07-15 14:58 tim_sheng 阅读(742) 评论(0) 推荐(0)

Ruby变量
摘要:每个变量保存一个对象的引用。person = "Tim"person.object_id ->938678person.class ->Stringperson ->"Tim"第一行代码,Ruby使用值“Tim”创建了一个String对象。这个对象的一个引用(reference)被保存在局部变量person中。接下去的快速检查展示了变量具备字符串的特性,它具有对象的ID,类和值。那么,变量是一个对象吗?在Ruby中,答案是“不”,变量只是对象的引用。对象漂浮在某处一个很大的池中(大多数时候是堆,即heap中),并由变量指向它们。pers 阅读全文

posted @ 2012-07-15 14:41 tim_sheng 阅读(410) 评论(0) 推荐(0)

Ruby 访问控制
摘要:“protected”和“private”之间的区别很微妙,如果方法是保护的,它可以被定义了该方法的类或其子类的实例所调用。如果方法是私有的,它只能在当前对象的上下文中被调用--不可能直接访问其他对象的私有方法,即便它与调用者都属同一个类的对象。Ruby和其他面向对象语言的差异,还体现在另一个重要的方面。访问控制实在程序运行时动态判定的,而非静态判定。只有当代码试图执行受阻的方法,你才会得到一个访问违规。有两种不同的方式定义函数的访问级别首先class MyClass def method1 #default is 'public' #... end protected #su 阅读全文

posted @ 2012-07-15 14:13 tim_sheng 阅读(380) 评论(0) 推荐(0)

导航