打印块的实际Ruby代码?[副本]

l5tcr1uw  于 2023-05-22  发布在  Ruby
关注(0)|答案(1)|浏览(215)

此问题已在此处有答案

Printing the source code of a Ruby block(6个回答)
Ruby block to string instead of executing [duplicate](3个答案)
8年前关闭。
这可能吗?

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
bvn4nwqk

bvn4nwqk1#

这个问题涉及到:

1.在Ruby 2.0之前,可以使用.to_source方法

  1. Ruby 2.0及更高版本的.to_source已被.source取代
    1.使用gem 'sourcify',你可以得到一些接近块的东西,但不完全相同:
    需要“sourcify”
    def block_to_s(&blk)blk.to_source(:strip_enclosure => true)end
    puts block_to_s { str =“Hello”str.reverse!print str }
    在上面的例子中,请注意,您必须在putsblock_to_s...)的参数周围加上括号。end)或使用{...}而不是do ... end,因为连接的强度在stackoverflow中反复讨论。
    这将为您提供:
str = "Hello"
str.reverse!
print(str)

这相当于原始的Ruby脚本块,但不是完全相同的字符串。
1.另请参阅method_source gem github.com/banister/method_source

相关问题