【问题标题】:Can I stringify a (simple) block in Ruby?我可以在 Ruby 中对(简单)块进行字符串化吗?
【发布时间】:2013-02-28 19:32:08
【问题描述】:

假设我有这个 Ruby 方法:

def get_proc_from_block(&block)
  return block
end

现在,如果我用这样的块调用它:

p = get_proc_from_block(&:length)

...我有什么办法可以检查p 并从中获取字符串"length"

【问题讨论】:

  • 首先,除非你的函数是类的一部分,否则变量'b'一离开函数就会被销毁,其次,没有办法获取方法的长度在运行时,因为解释器会将您的代码转换为该解释器可以理解的机器代码。在该方法中获取字符数的唯一方法是解析包含它的源文件。
  • @IonutHulub:我意识到b 只能在store_block 的范围内访问;我的意思是问是否可以从方法中检查它(我将更新问题以澄清)。但是,由于 Ruby 的动态特性,我对您的第二个说法持怀疑态度。例如,我可以创建一个新类并在其上定义一个length 方法,然后在该类的实例上调用该块,它就可以工作了。但也许您比我更了解这种工作方式(在这种情况下,非常感谢您提供更深入的答案!)。

标签: ruby block


【解决方案1】:

以下每个表达式都会产生相同的正则过程:

get_proc_from_block(&:length)
:length.to_proc
proc{ |a| a.length }

而且 Ruby 不支持检查其源代码。如需更详细的答案,请查看以下问题:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多