Как изменить результат метода в одну строку? - PullRequest
1 голос
/ 06 мая 2019

Мне нужно немного изменить вывод метода: выполнить функцию и, если это пустая строка, преобразовать ее в «1». Как я могу написать это коротко на одной строке?

var = some_really_long_method(foo)
var = "1" if var == ""

Я попробовал ниже, но это вызывает метод дважды, верно?

var = some_really_long_method(foo) == "" ? "1" : some_really_long_method(foo)

Ответы [ 3 ]

2 голосов
/ 06 мая 2019

Вы можете использовать Object # затем :

def some_really_long_method
  p 'called'
  p res = ["", "10"].sample
  res
end

var = some_really_long_method.then { |m| m == "" ? '1' : m }

Вы можете проверить сами, что метод вызывается один раз.

1 голос
/ 06 мая 2019

Новые строки в Ruby являются необязательными, их всегда можно заменить либо разделителем выражений (;), ключевым словом (например, then, do), либо иногда просто пробелами.

Таким образом, каждая программа, независимо от ее сложности, всегда может быть записана в одну строку, просто удаляя разрывы строк:

var = some_really_long_method(foo); var = "1" if var == ""
0 голосов
/ 06 мая 2019
var = "1" if (var = some_really_long_method(foo)) == ""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...