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

我遇到了一个或两个问题,首先我认为传递符号并不能作为@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 回答