【问题标题】:Print the actual Ruby code of a block? [duplicate]打印块的实际 Ruby 代码? [复制]
【发布时间】:2011-04-25 03:34:24
【问题描述】:

这可能吗?

def block_to_s(&blk)
  #code to print blocks code here
end

puts block_to_s do
  str = "Hello"
  str.reverse!
  print str
end

这会将以下内容打印到终端:

str = "Hello"
str.reverse!
print str

【问题讨论】:

    标签: ruby


    【解决方案1】:

    这个问题与:

    当我问这个列表中的第一个时,安德鲁建议我。通过使用 gem 'sourcify',您可以获得接近块的东西,但不完全相同:

    require 'sourcify'
    
    def block_to_s(&blk)
      blk.to_source(:strip_enclosure => true)
    end
    
    puts block_to_s {
      str = "Hello"
      str.reverse!
      print str
    }
    

    在上面,请注意,您必须在 puts (block_to_s ... end) 的参数周围加上括号,或者使用 {...} 而不是 do ... end,因为所讨论的连接强度在stackoverflow中重复。

    这会给你:

    str = "Hello"
    str.reverse!
    print(str)
    

    这相当于原来的块作为一个ruby脚本,但不是完全相同的字符串。

    【讨论】:

    • 在 Ruby 2.0 中,您可以使用#source 将 proc 打印为字符串。 #to_source 不再有效。
    • 您需要包含method_source gem(并且您需要在一个文件中,这对我来说不适用于 irb)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多