Rubyループが整数であるxではなく「x」画像を返すようにする
質問
次の例では、パラメーターとして指定した整数を返します。
def space(spacer_count)
spacer_count.times do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
必要な数の画像を返すようにするにはどうすればよいですか?たとえば、space(6)には、「6」という数字ではなく、spacer.pngの6つのコピーが返されるようにします。
ありがとう!
解決
すべての< img>
タグを含む単一の文字列を返す場合、次の操作を実行できます。
def space(spacer_count)
image_tag("24gray/spacer.png", :class => "spacer") * spacer_count
end
他のヒント
Ruby 1.8.7以降を使用している場合
def space(spacer_count)
spacer_count.times.map do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
Ruby 1.8.6では、回避策を使用する必要があります(1.8.7以降でも動作します)。 最初の回避策。
def space(spacer_count)
Array.new(spacer_count).map do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
2番目の回避策(範囲を使用)。
def space(spacer_count)
(1..spacer_count).map do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
ここにはすでにいくつかの良い答えがありますので、別の答えはしません。ただし、ここで何が間違っているのかを理解するのに役立つ場合があります。 Rubyのすべてのブロックは、最後のステートメントの評価を返します。
timesメソッドは、ブロックが実行された回数を返します。 各メソッドは、ブロックが実行された配列を返します。
ここにパターンがありますか?これらのイテレータメソッドのほとんどは、渡されたものを返します。
ブロックは、ほぼ引数のように呼び出し元の関数に渡されます。基本的に、これはあなたのコードで起こっていることです。
block = Proc.new { image_tag("24gray/spacer.png", :class => "spacer")}
def space(spacer_count)
spacer_count.times(&block)
end
イテレータが渡されたものを返すことがわかったので、space(6)が6を返す理由がわかります
所属していません StackOverflow