好的,根据澄清意图的建议我重申了这个问题。希望这个例子很清楚。
$funcname = ""
$message = ""
$DebugFormat = "Within #{$funcname} message: #{$message}"
def Something
$funcname = "Something"
# .
# .
# .
$message = "an important message."
puts "#{$DebugFormat}"
end
def Another
$funcname = "Another"
# Another method related code ...
$message = "Result message to output"
puts "#{$DebugFormat}"
end
因此,我们的想法是在各个地方使用各种与调试相关的字符串,而不需要重复相同的格式等。
无论如何,这不是超级关键,它更像是尝试更好地学习Ruby。
轻松,
-daniel
答案 0 :(得分:3)
不,如你所示,这是不可能的。 #{}
语法仅用于字符串插值,因此当您编写PP = "[#{fname}]"
时,它只是将字符串[Empty]
存储在变量PP
中。字符串无法记住用于生成它们的代码。
目前还不清楚你试图通过这种方式实现什么,但很可能一种方法比字符串插值更合适。
自编辑后更新:您似乎想要创建一种模拟堆栈跟踪。字符串插值仍然没有意义。相反,你可以这样做:
def debug(message)
puts "#{ caller[0][/`([^']*)'/, 1]}: #{message}"
end
def something
debug "an important message"
end
def another
debug "result message to output"
end
something
another
基于您对全局变量和常量的奇怪用法,您似乎正试图以不适合Ruby的方式应用来自其他语言的想法。我建议您阅读Ruby书籍以熟悉基础知识。
答案 1 :(得分:0)
您可以使用eval。 只需确保将“XXX”设置为实际消息中出现的非常不可能的字符串。
$DebugFormat = 'Within #{$funcname} message: #{$message}'
def somefunc
$funcname = "Something"
$message = "an important message."
puts eval("<<XXX\n" + $DebugFormat + "\nXXX\n")
end