Ответ 1
Вот как описывается метод instance:
Array#fill
Итак, вы можете:
a = Array.new(2)
=> [nil, nil]
a.fill(42)
=> [42, 42]
Вот как описывается метод class:
String::new
s = String.new('abc')
=> "abc"
Каковы различные значения символа Ruby sharp/number/pound/hash (#)
Сколько контекстов имеет символ #
в Ruby?
Я знаю, что # `представляет комментарий
# a comment
или 'convert to value':
i = 1
print "#{i}" # simple example
Однако я также вижу, что некоторые документы Ruby описывают встроенные методы, подобные этим:
Array#fill
File::file?
Почему они описывают одно и то же, используя 2 разных символа? Я новичок в Ruby. Спасибо
Вот как описывается метод instance:
Array#fill
Итак, вы можете:
a = Array.new(2)
=> [nil, nil]
a.fill(42)
=> [42, 42]
Вот как описывается метод class:
String::new
s = String.new('abc')
=> "abc"
В Perl # используется для комментирования, а поскольку Perl является "предком" Ruby, роль переносится.
Синтаксис "#{}"
называется "интерполяцией", и фунт был выбран наиболее вероятно, потому что интерполяция аналогична в некотором смысле комментированию, потому что вы меняете контекст своего кода (в этом случае для другого контекста для выполнения)
#, следующее за именем класса, просто означает, что следующий идентификатор - это метод этого класса, и это просто соглашение. Подробнее об этом здесь: Почему методы в документации Ruby предшествуют знаку хеша?
Просто, чтобы показать вам в качестве примера, что Ruby показывает метод экземпляра, которому предшествует символ #
и методы класса, которым предшествует символ .
.
class Foo
def self.foo;end
def bar;end
end
p Foo.method(:foo) # => #<Method: Foo.foo>
p Foo.new.method(:bar) # => #<Method: Foo#bar>
Интересен ::
, он действует аналогично .
, поскольку вы можете вызывать методы через оба
Car::is_hybrid?
и
car.is_hybrid?
Как вы увидите в большинстве программ, хотя .
является предпочтительным для методов.
Чаще всего предпочтительным является ::
, где у вас есть константа в классе, и вы увидите это в системных вызовах, таких как Math::PI
или те, которые вы создаете, например. ThePentagon::NUMBER_OF_BUILDING_SIDES