在对象上调用多个方法以获取多个值

时间:2016-06-27 14:41:21

标签: ruby

而不是:

v1 = obj.m1.m2.m3.m4
v2 = obj.m1.m2.m3.m5

我通常这样写,以避免调用相同的方法:

tmp = obj.m1.m2.m3
v1 = tmp.m4
v2 = tmp.m5

但我觉得设置一个tmp变量很难看。我想这样写一下:

v1, v2 = obj.m1.m2.m3.{:m4, :m5}

ruby​​是否有类似的语法?

2 个答案:

答案 0 :(得分:2)

你最接近的可能是:

v1, v2 = obj.m1.m2.m3.instance_eval{[m4, m5]}

但效率不高,也不值得这样做。

答案 1 :(得分:2)

v = obj.m1.m2.m3
v1, v2 = [:m4, :m5].map { |m| v.send(m) }