Ruby: как лучше узнать тип метода в method_missing? - PullRequest
0 голосов
/ 18 сентября 2010

На данный момент у меня есть этот код:

name, type = meth.to_s.match(/^(.+?)([=?]?)$/)[1..-1]

Но, похоже, это не лучшее решение = \

Есть идеи, как его улучшить?Спасибо.

Ответы [ 2 ]

1 голос
/ 18 сентября 2010

Лучший вариант выглядит так: name, type = meth.to_s.split(/([?=])/)

0 голосов
/ 19 сентября 2010

Это примерно так, как я бы реализовал мой method_missing:

def method_missing(sym, *args, &block)
  name = sym.to_s
  if name =~ /^(.*)=$/
    # Setter method with name $1.
  elsif name =~ /^(.*)\?$/
    # Predicate method with name $1.
  elsif name =~ /^(.*)!$/
    # Dangerous method with name $1.
  else
    # Getter or regular method with name $1.
  end
end

Или эту версию, которая оценивает только одно регулярное выражение:

def method_missing(sym, *args, &block)
  name = sym.to_s
  if name =~ /^(.*)([=?!])$/
    # Special method with name $1 and suffix $2.
  else
    # Getter or regular method with name.
  end
end
...