美文网首页
Ruby 中的 & 与代码块

Ruby 中的 & 与代码块

作者: howmanyfish | 来源:发表于2019-01-01 11:32 被阅读23次

摘要

&操作符号的含义是,这是一个Proc对象,我想把它当成代码块使用。去掉&操作符,就能再次得到一个Proc对象。
参考书籍 《Ruby元编程》(第二版)

基础范例:

def no_name_block_fuc
  yield
end

def name_block_fuc &test_block
  p test_block
  yield
end

name_block_fuc {1+1}
#<Proc:0x007fc3d8121af8@(irb):47>
 => 2

p = proc {2+2}                     => #<Proc:0x007fc3d7aa57b0@(irb):56>     
no_name_block_fuc(&p)     => 4

拓展:
当&作用的对象非Proc时,会自动调用对象的#to_proc方法,把对象转化程一个Proc,再转化成一个代码块。
比如Symbol中有如下代码:

class Symbol
  def to_proc
    Proc.new { |x| x.send(self) }
  end
end

所以,经常看到如下类似代码:

a = ['abc','cde']
a.map(&:reverse)

相关文章

  • Ruby 中的 & 与代码块

    摘要 &操作符号的含义是,这是一个Proc对象,我想把它当成代码块使用。去掉&操作符,就能再次得到一个Proc对象...

  • Ruby块与模块

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

  • Ruby代码块

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

  • Ruby 循环

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

  • ruby 块

    ruby块: 块中的代码总是包含在大括号{}中 块总是从与其具有相同名称的函数调用,eg:如果你的块名为test,...

  • Ruby代码块Blocks的用法介绍

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

  • yield in ruby

    ruby中的关键词yield通常在一个方法中调用,对代码块进行控制,如果没有提供对应的代码块,调用该方法将导致异常...

  • ruby中的作用域和代码块

    ruby中没有嵌套的作用域,它的作用域之间是分开的,一旦进入一个新作用域,原先的绑定就会被替换为一组新的绑定。 作...

  • ruby中的break

    ruby中的break作用 中断代码块 while 、utils循环,如果break后面有参数的话,则返回该参数。...

  • RubyGems、Gem、Bundle

    类比于C#中的包,Java中的package,Ruby程序中的代码库( ruby software package...

网友评论

      本文标题:Ruby 中的 & 与代码块

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