0

メソッドにシンボルを渡して取得したい

def block
  @something = Something.find(1)
  hsh = {:type => :method_to_perform}
  hsh.each { |k, v| nil_test k, v }
end

def nil_test k, v
  @something.try(:k) ? (@k = @something.k.v) : nil
end

1 つまたは 2 つの問題が発生しています。最初に、シンボルを渡すことがメソッドとして機能していないと思います@something。シンボルをどのように渡し、別のブロックへのメソッドとして機能させるのですか?

@k第二に、私はキーがシンボルになることを望ん@typeでい@kます. この問題を解決する方法を知っていますか?

4

1 に答える 1

1

send(または)を使用する必要がありますpublic_send

@something.try(k) ? instance_variable_set(:@k, @something.send(k).send(v)) : nil

あなたもそうするかもしれません

instance_variable_set(:@k, @something.try(k).try(v))

これは同等です。

于 2012-07-28T03:43:50.237 に答える