0

さて、意図を明確にするための提案に従って、私は質問を言い直しました。この例が明確であることを願っています。

$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 をよりよく学ぼうとする試みにすぎません。

気楽に行き、

-ダニエル

4

2 に答える 2

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 の本を一読して、基本に慣れることをお勧めします。

于 2011-02-18T03:36:47.393 に答える
0

これには eval を使用できます。「XXX」を実際のメッセージに表示される可能性が非常に低い文字列にするようにしてください。

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

def somefunc
   $funcname = "Something"
   $message = "an important message."
   puts eval("<<XXX\n" + $DebugFormat + "\nXXX\n")
end
于 2011-05-24T11:32:24.690 に答える