Почему метод `next` в Ruby вызывает SyntaxError, в то время как` next! `Или` self.next` этого не делают, пока обезьяна исправляет класс String? - PullRequest
0 голосов
/ 22 января 2019

Следующий код работает нормально:

class String
  def foo
    next!
  end
end

puts 'hh'.foo    # hi

Этот код также отлично работает:

class String
  def foo
    self.next
  end
end

puts 'hh'.foo    # hi

Но этот код не работает:

class String
  def bar
    next
  end
end

# Invalid next (SyntaxError)

Почемуиспользует ли Ruby ключевое слово next и вызывает SyntaxError, хотя я работаю с String class?

1 Ответ

0 голосов
/ 22 января 2019

В ваших первых двух примерах анализатор Ruby уверен, что вы вызываете методы, поскольку ключевое слово next не может быть использовано таким образом.

В третьем примере похоже, что вы используете ключевое слово next вместо вызова метода. На этом этапе анализатор не может знать, что вы на самом деле хотите вызвать метод next (который может существовать или не существовать).

Таким образом, вы должны направлять синтаксический анализатор, чтобы избежать этих неясностей. Вы можете использовать явный получатель, как во втором примере, или использовать такие конструкции, как send(:next) вместо

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