4

変数名の一部として使用したい文字列があります。具体的には、Railsルートパスでは次のようになります。

<%= foo_path %>
<%= bar_path %>

ルート名の最初の部分を動的にしたい。だから何かのような

@lol = "foo"
<%= [@lol]_path %> # <-- This would really be the "foo_path" variable

Rubyはこれを行うことができますか?

4

2 に答える 2

10

もちろん:

lol = 'foo'

send "#{lol}_path"
# or
send lol + '_path'

説明:Object#sendメソッドを受信者に送信します(つまり、メソッドを「呼び出し」ます)。他のメソッド呼び出しと同様に、明示的なレシーバー(たとえばsome_object.send 'foo')がない場合、現在のコンテキストがレシーバーになるため、呼び出しsend :fooはと同等self.send :fooです。実際、Railsはこの手法を舞台裏で非常に多く使用しています()。

于 2011-11-16T06:11:35.907 に答える
2

もっと何か!

class Person
  attr_accessor :pet
end

class Pet
  def make_noise
     "Woof! Woof!"
  end
end

var_name = "pet"
p = Person.new
p.pet = Pet.new
(p.send "#{var_name}").make_noise

つまり、ここで何が起こっているのかというと、
p.send "some_method"呼び出しp.some_methodとかっこで囲まれているため、連鎖が可能になります。つまりp.pet.make_noise、最後に呼び出しが可能になります。はっきりしているといいのですが。

于 2013-05-30T16:37:41.243 に答える