美文网首页
Ruby语法(代码块和迭代)

Ruby语法(代码块和迭代)

作者: _西风凋碧树 | 来源:发表于2019-04-12 11:35 被阅读0次

代码块(Block)可看做一个没有名字的方法,代码块也是对象,它是Proc类的实例.

两种形式的代码块
def run_twice
    puts "开始运行"
    yield
    yield
    puts "运行结束"
end

run_twice {puts "Say hello!"}

i = 0
run_twice do
    i=i+1
    puts i
end
puts i

输出:
开始运行
Say hello!
Say hello!
运行结束
开始运行
1
2
运行结束
2
代码块也可以接受参数
def run_twice(arg)
    puts "开始运行"
    yield arg
    yield arg
    puts "运行结束"
end

run_twice("hello!") {|word| puts word}
  
  i = 0
  run_twice(2) do |x|
    i += x
    puts i
  end
puts i

输出:
开始运行
hello!
hello!
运行结果
开始运行
2
4
运行结果
4

yield和迭代

迭代实例
class Array
    def for_each
        # 遍历数组
        for  i in (0..self.length-1) do
            # 将数组元素逐个传入代码块进行迭代
            yield self[i]
        end
    end
end
(["a","b","c"]).for_each{|i| puts i}

sum = 0
[1,2,3,4,5,6,7,8,9,10].for_each do |i|
    sum += i
end
puts sum
输出:
a
b
c
55

Proc和lambda介绍

# 用proc创建代码块
my_block = Proc.new{|x| puts x}
Proc方法示例
def run_twice(arg,&block)
    puts "开始运行"
    block.call arg
    block.call arg
    puts "运行结束"
end

my_block = Proc.new {|word| puts word}
run_twice("hello!",&my_block)

# 直接传递匿名代码块也行
run_twice("hello!") {|word|puts word}
输出:
开始运行
hello!
hello!
运行结束
开始运行
hello!
hello!
运行结束

注意:使用Proc方法的好处是能够感觉到传递了代码块参数进入方法,不过你要注意的是参数定义和传入的时候前面必须加上&符号。

Ruby还提供了一个lambda的方法实现代码块的创建,lambda的Proc的方法使用上几乎一样。lambda是创建代码块的首选方法,因为他的运作机制使得执行代码块的方式与调用方法一样。

def proc_test
    f = Proc.new {return "从Proc代码块中直接跳出"}
    f.call
    return "proc_test正常退出"
end

def lambda_test
    f = lambda {return "从lambda中直接跳出"}
    f.call
    return "lambda_test正常退出"
end

puts proc_test
puts lambda_test 
输出:
从Proc代码块中直接跳出
lambda_test正常退出

相关文章

  • Ruby语法(代码块和迭代)

    代码块(Block)可看做一个没有名字的方法,代码块也是对象,它是Proc类的实例. 两种形式的代码块 代码块也可...

  • Ruby 循环

    Ruby 中的循环用于执行相同的代码块若干次。 Ruby while 语句 语法如下: 当 conditional...

  • Ruby 语句与控制结构

    迭代器和可枚举对象 迭代器的描述并不准确,像”期待一个关联代码块的方法“这样的描述更加准确一些。迭代器是 Ruby...

  • Ruby代码块

    Ruby最强大的语言就是他的代码块 [root@master1 ruby]# cat test_block.rb

  • Ruby块与模块

    Ruby 块 Ruby 有一个块的概念。块由大量的代码组成。您需要给块取个名称。块中的代码总是包含在大括号 {} ...

  • 2018-06-11

    代码块 代码块语法遵循标准markdown代码,例如:

  • 2018-06-11

    测试 代码块 代码块语法遵循标准markdown代码,例如:

  • Ruby代码块Blocks的用法介绍

    Ruby的代码块,是Ruby的特色之一。通常存在于do...end中间或者花括号{}中间。代码块可以作为隐式的或者...

  • 控制语句总结

    #if语句 语法:if(判断){代码块}else{代码块} if(){}else if()。。。。。 if语句是万...

  • 《Ruby 元编程》读后总结

    什么时候需要读这本书? 扫过一遍基本的 Ruby 语法,自己也写过一些 Ruby 代码,觉得 Ruby 也就是一个...

网友评论

      本文标题:Ruby语法(代码块和迭代)

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