随笔分类 -  Ruby

Ruby常用文件操作
摘要:#建立一个222.rb文件并且输入字符file = File.open("222.rb","w+")file.puts "123\nwadwa\n12124124\ndwdw"file.close#输出222.rb的内容File.open("222.rb","r+") do |file|while ... 阅读全文
posted @ 2014-05-22 17:17 秋叶leaf 阅读(2143) 评论(0) 推荐(0)
Ruby一行代码实现快速排序
摘要:1 def quick_sort(a) 2 3 return a if a.size x}) : [] 6 7 end 8 9 array = [72,6,57,88,60,42,83,73,42,48,85] 10 11 p quick_sort(array) #=> [6... 阅读全文
posted @ 2014-05-09 10:08 秋叶leaf 阅读(413) 评论(0) 推荐(0)
调试常用的方法
摘要:1 object.methods() # 列出对象的类的实例方法。即该实例的可用方法列表。puts [].methods.grep /^re/ #列出Array以re开头的实例方法列表2 object.instance_variables() #列出对象(Module或Class)的实例变量cl... 阅读全文
posted @ 2014-05-08 15:17 秋叶leaf 阅读(197) 评论(0) 推荐(0)
Ruby实现冒泡排序
摘要:1 def bubble_sort(array) 2 return array if array.size = array[j+1] 7 end 8 end 9 10 return array11 end12 13 a = [12,42,1,25,32,63... 阅读全文
posted @ 2014-05-07 17:01 秋叶leaf 阅读(242) 评论(0) 推荐(0)
Ruby代理例子
摘要:require 'delegate'class Assistantdef initialize(name)@name = nameenddef read_emailputs "(#{@name}) It's mostly spam."enddef check_scheduleputs "(#{@name}) You have a meeting today."endendclass Manager please hold my callsanne.read_email #=>(Frank) It's mostly s 阅读全文
posted @ 2014-04-03 16:02 秋叶leaf 阅读(313) 评论(0) 推荐(0)
用Ruby写自动生成Sql语句脚本遇到的问题
摘要:1 打开文件的方法: File.readlines("d:/AutoSql/info.txt")这条语句返回的结果是一个Array,所以需要写成File.readlines("d:/AutoSql/info.txt")[0]以便调用.同时,这样会在后面带上换行符,因此还需要调用chomp方法,最后的语句:msisdn=File.readlines("d:/AutoSql/info.txt")[0].chomp2 根据时间动态生成文件名:获取时间的方法 time=Time.now#生成文件名name=msisdn+'-' 阅读全文
posted @ 2014-03-21 16:56 秋叶leaf 阅读(509) 评论(0) 推荐(0)
Ruby中require,load,include,extend的区别
摘要:require,load用于文件,如.rb等等结尾的文件。include,load则用于包含一个文件中的模块。require 一般情况下用于加载库文件,而load则用于加载配置文件。1 require:加载一个库,并且只加载一次,如果多次加载会返回false。只有当要加载的库位于一个分离的文件中时才有必要使用require。使用时不需要加扩展名,一般放在文件的最前面:require ‘test_library’2 load:load用来多次加载一个库,必须指定扩展名:load ‘test_library.rb’3 extend:在定义类时使用,把module的实例方法作为当前类的类方法.mod 阅读全文
posted @ 2014-03-17 17:11 秋叶leaf 阅读(893) 评论(0) 推荐(0)
(Rspec技巧)指定Rspec测试文件
摘要:1 只测试匹配到的字符串涉及的specsrspec -e expect(page).to have_content2 只测试指定文件rspec spec/requests/static_pages_spec.rb3 指定文件并指定字符串rspec spec/requests/static_pages_spec.rb -e expect(page).to have_content 阅读全文
posted @ 2014-03-14 15:25 秋叶leaf 阅读(467) 评论(0) 推荐(0)
怎样新建和加载一个Ruby Gem
摘要:1 新建一个gem:> bundle gem my_mongoid create my_mongoid/Gemfile create my_mongoid/Rakefile create my_mongoid/LICENSE.txt create my_mongoid/README.md create my_mongoid/.gitignore create my_mongoid/my_mongoid.gemspec create my_mongoid/lib/my_mongoid.rb create my_mongoid/lib/my_mongoid/version.rb新建gem所依 阅读全文
posted @ 2014-03-14 11:53 秋叶leaf 阅读(532) 评论(0) 推荐(0)
<Ruby>元编程第五章笔记
摘要:1 Kernel#eval() , 它不是使用块,而是直接使用包含Ruby代码的字符串--简称为代码字符串.Kernel#eval()方法会执行字符串中的代码,并返回执行结果:1 array = [10,20]2 element = 303 eval("array[10,20,30]2 Binding就是一个用对象表示的完整作用域.可以通过创建Binding对象来捕获并带走当前的作用域.接下来,可以通过eval()方法,instance_eval()方法或class_eval()方法,在Binding对象所携带的作用域中执行代码.可以使用Kernel#binding()方法来创建Bi 阅读全文
posted @ 2014-03-12 18:19 秋叶leaf 阅读(295) 评论(0) 推荐(0)
<Ruby>元编程第四章笔记
摘要:1 所有使用def定义的方法都成为当前类的实例方法.2 Module#class_eval()方法会在一个已存在类的上下文中执行一个块:1 def add_method_to(a_class)2 a_class.class_eval do3 def m; 'Hello!'; end4 end5 end6 7 add_method_to String8 "abc".m #=> 'Hello!'3 当self不是一个类时,当前类的角色由self的类来充当.处于顶级作用域时,此时当前类是Object----main对象的类.这也就是为什么当在 阅读全文
posted @ 2014-03-05 20:42 秋叶leaf 阅读(302) 评论(0) 推荐(0)
<<Ruby元编程>>第三章笔记
摘要:1 块是一种控制作用域(scope)的强大手段,作用域指的是哪些代码可以看到哪些变量和方法.2 只有在调用一个方法时才可以定义一个块.块会被直接传递给这个方法,然后该方法可以用yield关键字回调这个块.3 块中最后一行代码执行的结果会被作为返回值.4 在一个方法中,可以向Ruby询问当前的方法调用是否包含快,可以通过Kernel#block_given?()方法来做到:1 def a_method2 return yield if block_given?3 'no block'4 end5 6 a_method #=> no block7 a_method {&quo 阅读全文
posted @ 2014-03-05 10:30 秋叶leaf 阅读(263) 评论(0) 推荐(0)
一个使用method_missing()容易引发的bug
摘要:class Roulette def method_missing(name,*args) person = name.to_s.capitalize 3.times do number = rand(10) + 1 puts "#{number} = ..." end puts "#{person} got a #{number}" endendnumber_of = Roulette.newputs number_of.bobputs number_of.frank Ruby元编... 阅读全文
posted @ 2013-12-29 13:29 秋叶leaf 阅读(186) 评论(0) 推荐(0)
Ruby定义私有方法的两种途径
摘要:#定义私有方法途径1:class C def public_method private_method end def private_method end private :private_method #定义方法为私有end#定义私有方法途径2:class C def public_method private_method end private def private_method #定义私有方法 endendC.new.public_method 阅读全文
posted @ 2013-12-29 13:28 秋叶leaf 阅读(249) 评论(0) 推荐(0)
Ruby类变量和实例变量比较
摘要:1 类变量名以@@开始,一个类变量被这个类所有的实例对象共享;实例变量名以@开始,每个实例对象有各自不同的实例变量;2 类变量在使用前必须初始化,否则在使用时会报错;而实例变量如果没有初始化,则使用时返回nil;3 类变量是私有的,在类外无法直接访问,可以通过类方法和实例方法访问;class B @@number = 11 @@num = 22 def my_method #定义实例方法 puts @@number end def self.my_method #定义类方法 puts @@num endendb =... 阅读全文
posted @ 2013-12-29 13:27 秋叶leaf 阅读(373) 评论(0) 推荐(0)
Ruby里proc和lambda的两个重要区别
摘要:1 在proc和lambda中,return关键字有不同含义: 在proc中,return仅仅表示从这个lambda中返回. 在lambda中,return不是从proc中返回,而是从定义proc的作用域中返回.def one_method p = Proc.new{return 10} #调用这个块的时候,从p的作用域直接返回10,因此下面的return将不会执行 result = p.call return result * 2enddef two_method p = lambda{return 10} #调用这个块的时候,从lambda中返回10 ... 阅读全文
posted @ 2013-12-29 13:26 秋叶leaf 阅读(475) 评论(0) 推荐(0)
ruby异常处理
摘要:begin num = 0 de = 0 value = num/derescue ZeroDivisionError => ex puts "error,divede zero" # error,divede zero puts ex # divided by 0 puts ex.class # ZeroDivisionError puts ex.class.superclass # StandardError puts ex.class.super... 阅读全文
posted @ 2013-12-29 13:25 秋叶leaf 阅读(442) 评论(0) 推荐(0)
ruby的数组赋值
摘要:arr = []a = 1b = 2c = 3arr[0] = aarr[1] = barr[2] = cputs arr # 1 2 3a = 4b = 5c = 6puts arr # 1 2 3这里,数组arr里面的每个元素存放的是与a,b,c指向地方一样的地址,而不是存放a,b,c的值;当a,b,c的值发生改变时,数组arr指向的地址的值并没有发生变化; 阅读全文
posted @ 2013-12-29 13:24 秋叶leaf 阅读(254) 评论(0) 推荐(0)
ruby实现生产者和消费者
摘要:#ruby实现生产者和消费者代码require 'thread'queue = Queue.newconsumers = Thread.new do 5.times do |i| obj = queue.pop print "consumer :#{i}\n" sleep(rand(0.05)) endendproducters = Thread.new do 5.times do |i| sleep(0.1) print "producter : #{i}\n" queue.push("It... 阅读全文
posted @ 2013-12-29 13:23 秋叶leaf 阅读(132) 评论(0) 推荐(0)