Techioz Blog

Ruby 補間の結果、出力の順序が乱れます

概要

ここでは Ruby を初めて使用し、作成したクラスのインスタンスの内容を出力しようとしています。問題ないと思いますが、次の known_var は配列から取得されています。私が実行している行は次のとおりです。

for known_var in @known_variables
  puts "known_var is #{known_var}"

私が得ている結果は一貫して次の形式です。

resistance = 2200 Ohmsknown_var is #<Variable:0x000001e21047f920>

このクラスにはカスタマイズされた to_s 定義があり、最初のチャンクがそのままフォーマットされるのはそのためです。

def to_s
    if @value == nil
    print "#@full_name = 0"
    else print "#@full_name = #@value #@unit"
    end
end

ただし、これが文字列の「known_var is」部分の前に表示される理由はわかりません。次のように指定すると、同様に見えます。

puts "known_var is #{known_var}"

Variable 部分を差し引いたものです。これは理にかなっています。

amperage = 12 Aknown_var is

「known_var is XXXXXX」というテキストを put で指定された順序で出力したい場合、何か別の方法で実行する必要がありますか?

説明が見つかるかどうかを確認するためにいくつかの検索を実行しました(今のところ運がありません)。 put を 2 つの別々の行に分割することでこの問題を回避することもできますが、それは私がやりたいことではありません。さらに重要なのは、put がここでのような順序付けをしている理由を理解したいということです。

解決策

to_s メソッド内でステートメントを出力することは避けてください。代わりに、以下の更新された to_s メソッドを検討してください。

def to_s
  if @value == nil
    "#@full_name = 0"
  else
    "#@full_name = #@value #@unit"
  end
end