美文网首页
Ruby定义带块的方法

Ruby定义带块的方法

作者: Shawn_Wang | 来源:发表于2016-01-22 00:28 被阅读1418次

Ruby定义带块的方法

Ruby中do ~end之间的部分称为块,也可以写为{..}
下面看一个简单例子,怎么自定义带块的方法.

def myloop
    while true
        yield
    end
end
num = 1
myloop do 
    puts "num is #{num}"
    break if num > 100
    num *= 2
end

这里使用了yield,yield是定义带块的方法时候重要的关键字,可以这么理解yield,调用方法时候通过块传递进来的处理会在yield定义的地方执行。上面这个例子中yield部分没有参数,如果有参数,程序就会将参数当做块变量传递到块中
下面这个例子对yield传递1个参数,就有1个块变量接受。通过对yield传递0,1,3个参数,对应的块做如何处理的。

def block_args_test
    yield() #0个块变量
    yield(1) #1个块变量
    yield(1, 2, 3) #3个块变量
end
puts "通过|a|接收块变量"
block_args_test do |a|
    p |a|
end
puts 

puts "通过|a, b, c|接收块变量"
block_args_test do |a, b, c|
    p |a, b, c|
end
puts 

puts "通过|*a|接收块变量"
block_args_test do |*a|
    p |*a|
end

输出结果:

通过|a|接收块变量
[nil]
[1]
[1]

通过|a, b, c|接收块变量
[nil, nil, nil]
[1, nil, nil]
[1, ,2, 3]

通过|*a|接收块变量
[[]]
[[1]]
[[1, 2, 3]]

再举一个传递块参数,获取块值的例子

def total(from, to)
    result = 0
    from.upto(to) do |num|
        if block_given?
        result += yield(num)
        else 
        resunt += num
        end
    end
    return result
end

p total(1, 10)
p total(1, 10) {|num| num ** 2}

相关文章

  • Ruby定义带块的方法

    Ruby定义带块的方法 Ruby中do ~end之间的部分称为块,也可以写为{..}。下面看一个简单例子,怎么自定...

  • From Objective-C to Ruby(4)-类和模块

    类 定义类 OC: ruby: 初始化方法 OC: ruby: 实例变量和属性 OC: ruby: 类方法和对象方...

  • From Objective-C to Ruby(3)-方法和块

    方法 定义方法 OC: ruby: 调用方法 OC: ruby: 参数的默认值 OC: 方法的返回值 OC: ru...

  • Ruby 方法的定义

    定义方法的一般语法如下: 方法名可由英文字母, 数字, 下划线组成, 但不能以数字开头.示例: 上述方法中, 执行...

  • ruby 方法调用中的*和&

    在ruby方法定义、调用中,*可以把数组转化为参数,&可以把Proc或lambda转化为块,在开发中可以起到很好的...

  • 8.方法

    方法:将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集 方法定义 不带参数的方法定义 带参数的方法...

  • Ruby程序员的Golang之旅02

    Golang的函数 @ Ruby的方法 不得不说在Ruby里面定义一个方法实在是过于简单,以至于在学习其他语言的时...

  • Ruby元编程笔记 - 类中的魔法

    Ruby元编程笔记 - 类定义 类定义揭秘 在类定义中,self就是正在定义的类。 所有使用def定义的方法都成了...

  • Ruby中类方法的定义

    Ruby中类方法的定义 方法的接受者就是类本身(类对象)的方法成为类方法。类方法的几种形式如下: 如果以为就是上面...

  • Ruby 块

网友评论

      本文标题:Ruby定义带块的方法

      本文链接:https://www.haomeiwen.com/subject/rjolkttx.html