【问题标题】:Get name of Block while in Block (self) Ruby在 Block (self) Ruby 中获取 Block 的名称
【发布时间】:2013-06-26 20:49:44
【问题描述】:

我想知道如何在块中获取块/过程的名称,然后将其传递给方法。我需要这样的块的名称:

method("hello") do
  puts "My name is #{self}"
end

当方法运行块时会打印出类似的东西:

"My name is #<Proc:0xa3de668@/path/to/file.rb:8>"

【问题讨论】:

  • 你真的只想要块源代码中的位置吗?块(以及一般的 Procs)并没有真正的名称。
  • 也许你可以得到一个proc的名字,但是你不能得到一个block的名字,因为block不是一个Ruby对象。

标签: ruby block self proc


【解决方案1】:

您可以通过在不提供块的情况下调用Proc.new(在方法内部)来获得对方法内部隐式传递块的引用,从而产生它。例如:

def speak
  puts yield
  block = Proc.new # Creates a proc object from the implictly passed block.
  puts block.call
end

speak { "Hello, from implicit block!" }

【讨论】:

    【解决方案2】:

    不能对块执行此操作,但对于 procs...

    def hello
      puts yield
    end
    
    my_proc = Proc.new {"I am #{my_proc}"}
    
    method("hello").call(&my_proc)
    
    #I am <#Proc:0x0...@...>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2018-12-28
      相关资源
      最近更新 更多