Могу ли я определить свой собственный синтаксис «если есть» в ruby? - PullRequest
0 голосов
/ 19 марта 2011

Я постоянно пишу что-то вроде:

val if val && !val.empty?

Могу ли я определить этот синтаксис более кратко, например:

val if_any 

или

val if any

?

Ответы [ 3 ]

4 голосов
/ 19 марта 2011

Есть вал.бланк?

irb(main):008:0> ''.blank?
=> true
irb(main):009:0> '   '.blank?
=> true
irb(main):010:0> nil.blank?
=> true
irb(main):011:0> false.blank?
=> true
irb(main):012:0> 'whatever'.blank?
=> false
2 голосов
/ 19 марта 2011

Нет, я не верю, что Ruby позволяет вам расширять синтаксис таким образом. Самое близкое, что вы можете получить, это добавить метод в Object:

class Object
  def any?
    !!self && !self.empty?
  end
end

"hi".any? # => true
[].any?   # => false
nil.any?  # => false

if x.any?
  # do something
end
1 голос
/ 20 марта 2011

Небольшой вариант метода Object, который возвращает фактическое значение.

class Object
  def if_any?
    self if self && (!self.respond_to?(:empty?) || !self.empty?)
  end
end

[].if_any? # => nil
[42].if_any? # => [42]

"".if_any? # => nil
"hi".if_any? # => "hi"

# and for the objects that don't define #empty?
nil.if_any? # => nil
42.if_any? # => 42
false.if_any? # => nil
true.if_any? # => true

Редактировать: Хм, посмотрев на это снова, я думаю, что не буду использовать вопросительный знак в имени метода, поскольку это противоречит соглашению ruby ​​о возвращении логического значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...