Открытый метод доступа против публичной постоянной Ruby - PullRequest
1 голос
/ 02 июля 2019

Я новичок в Ruby и все еще пытаюсь понять основы.Для этого я не смог найти информацию в интернете.Представьте себе этот пример:

class Person

  AGE = 18
  def self.get_age
    18
  end

end

С консоли:

Person.get_age

=> 18

Person.AGE

=> NoMethodError: undefined method AGE' for Person:Class

Почему такая разница в синтаксисе?

Попытки Person::AGE и Person::get_age, оба дают одно и то же:

=> 18 Как я и ожидал.

1 Ответ

2 голосов
/ 02 июля 2019

Синтаксис другой, потому что вы можете сделать это:

class Person
  AGE = 18
  def self.AGE
    19
  end
end

Person::AGE вернет 18, потому что вы получаете доступ к константе.
Person.AGE вернет 19, потому что вы обращаетесь к методу.

По сути, :: - это разделитель констант, а . - это разделитель, вызывающий метод (когда следующее слово начинается с заглавной буквы и в выражении нет скобок).

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