Написание лучше Ruby: Как привести объекты к ложному или истинному? - PullRequest
1 голос
/ 19 февраля 2010

В ruby, какой самый лучший / самый элегантный способ вернуть значение, например:

#method returns true or false if 'do i match' is present in string
def method(str)
  str =~ /do i match/
end

Ответы [ 3 ]

6 голосов
/ 19 февраля 2010

Некоторые люди будут делать:

def foo
  !!(str=~/do i match/)
end

# or

def foo
  match = str=~/do i match/
  !!match
end

Второй ! запускает тест на достоверность и отрицает ответ, затем первый ! снова отрицает его, чтобы получить первоначальный истинный результат.

Я предпочитаю более явный синтаксис:

def foo
  str =~ /do i match/ ? true : false
end

Это делает правду, но мне кажется яснее. Делай то, что тебе кажется чистым.

4 голосов
/ 19 февраля 2010

Я могу быть еретиком, чтобы сказать это, но я думаю, что их неявное возвращение прекрасно. В этом случае оно оценивается как истинное или ложное, но я вижу, как люди могут подумать, что это неясно.

Вы можете оставить неявный возврат и сделать вместо этого:

str =~ /do i match/ ? true : false
2 голосов
/ 19 февраля 2010

Компромисс между удобочитаемостью и производительностью

!str.match(/do i match/).nil?
...