Ruby: передавать параметры в метод, только если непустой - PullRequest
4 голосов
/ 10 марта 2011

Мне дан хеш self.options (возможно, пустой) и имя метода. Теперь мне нужно вызвать метод, передав хэш параметров, например:

obj.send(method_name, ...args..., self.options)

Но я бы хотел поддержать вызов методов, которые вообще не ожидают хэша опций. Поэтому, если не задано никаких опций (self.options.empty?), я бы хотел , а не , чтобы передать пустой метод в метод. Лучшее, что я мог придумать, это:

obj.send(method_name, ...args..., *(self.options.empty? ? [] : [self.options]))

Есть ли лучшая идиома для этого?

Ответы [ 2 ]

6 голосов
/ 10 марта 2011

Вам не нужно [], если параметры пустые.* ноль возвращает пустоту в этой позиции.

Будет ли это работать?

obj.send(method_name, ...args..., *([self.options] unless self.options.empty?))

Кстати, вы можете опустить себя, так что вы можете иметь

obj.send(method_name, ...args..., *([options] unless options.empty?))
0 голосов
/ 10 марта 2011
obj.send(method_name, ...args..., *([self.options.presence].compact))

или, как правильно сказал @sawa, вы можете выбросить self

obj.send(method_name, ...args..., *([options.presence].compact))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...