通过#{}进行的ruby表达式扩展会进行双重扩展吗?

通过#{}进行的ruby表达式扩展会进行双重扩展吗?,ruby,expression,expansion,Ruby,Expression,Expansion,好的,根据澄清意图的建议,我重申了这个问题。希望这个例子是清楚的 $funcname = "" $message = "" $DebugFormat = "Within #{$funcname} message: #{$message}" def Something $funcname = "Something" # . # . # . $message = "an important message." puts "#{$DebugFormat}" e

好的,根据澄清意图的建议,我重申了这个问题。希望这个例子是清楚的

$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

放轻松


-丹尼尔

不,这不可能如您所示。
{}
语法仅用于字符串插值,因此当您编写
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书籍,熟悉基本知识。

不,正如您所示,这是不可能的。
{}
语法仅用于字符串插值,因此当您编写
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书籍,熟悉基本知识。

您可以使用eval。 只要确保“XXX”是一个不太可能出现在实际消息中的字符串

$DebugFormat = 'Within #{$funcname} message: #{$message}'

def somefunc
   $funcname = "Something"
   $message = "an important message."
   puts eval("<<XXX\n" + $DebugFormat + "\nXXX\n")
end
$DebugFormat='在#{$funcname}消息中:#{$message}'
def somefunc
$funcname=“某物”
$message=“重要信息。”
放置eval(您可以使用eval进行此操作。
只要确保“XXX”是一个不太可能出现在实际消息中的字符串

$DebugFormat = 'Within #{$funcname} message: #{$message}'

def somefunc
   $funcname = "Something"
   $message = "an important message."
   puts eval("<<XXX\n" + $DebugFormat + "\nXXX\n")
end
$DebugFormat='在#{$funcname}消息中:#{$message}'
def somefunc
$funcname=“某物”
$message=“重要信息。”

放评估(”我必须问-你为什么要这样做?这很可能是一个糟糕的设计决策的指标。嗯,我认为给出这个例子的目的很清楚…我想为调试输出指定一个全局字符串,并在string是书面的。我同意Jamie的观点。我不知道你所说的“方法特定值”是什么意思,因为你没有向我们展示任何方法,但我认为如果我们能更好地了解你的真实问题,可以给出一个更优雅的解决方案。具体来说,你想实现什么?请修改你的问题。我修改了这个问题-希望它有帮助。什么语言进行这种扩展?我很好奇。我必须问-你为什么要这样做?很有可能这是一个糟糕的设计决策的指标。嗯,我想很清楚给出这个例子的目的是什么…我想指定一个全局字符串用于调试输出,并使用方法spe在编写字符串时,cific值以编程方式反映。我同意Jamie的观点。我不知道你所说的“方法特定值”是什么意思,因为你没有向我们展示任何方法,但我认为如果我们想更好地了解你的实际问题,可以给出一个更优雅的解决方案。具体来说,你想实现什么?请修改你的问题我已经修改了这个问题-希望能有帮助。什么语言做这种扩展?我很好奇。一个方法肯定是标准的解决方案,但我试着做这个字符串扩展,然后…你知道兔子洞是怎么打开的…一个方法肯定是标准的解决方案,但我试着做这个字符串扩展,一个然后…你知道兔子洞是怎么打开的。。。