2014年3月5日
摘要:
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
阅读(261)
推荐(0)
2013年12月29日
摘要:
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
阅读(183)
推荐(0)
摘要:
#定义私有方法途径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
阅读(248)
推荐(0)
摘要:
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
阅读(370)
推荐(0)
摘要:
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
阅读(471)
推荐(0)
摘要:
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
阅读(440)
推荐(0)
摘要:
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
阅读(250)
推荐(0)
摘要:
#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
阅读(131)
推荐(0)