2013-09-03 17 views
17

Jakie są różne znaczenia symbolu Ruby/znaku liczby/funta/hasha (#)Jaki jest znak # (ostry, numer, funt, hash) używany w Ruby?

Ile kontekstów ma symbol # w Rubim?

wiem, że # `reprezentuje komentarz

# a comment 

lub 'konwertować do wartości':

i = 1 
print "#{i}" # simple example 

Jednak ja również zobaczyć niektóre docs Ruby opisują wbudowanej metody, takie jak :

Array#fill 
File::file? 

Dlaczego opisują to samo, używając 2 różnych symboli? Jestem nowy w Ruby. Dzięki

+7

W drugiej części pytania: '#' oznacza metodę instancji, a '::' oznacza metodę klasy. –

Odpowiedz

10

ten sposób instancja metoda opisana:

Array#fill 

Więc można:

a = Array.new(2) 
=> [nil, nil] 
a.fill(42) 
=> [42, 42] 

ten sposób klasa metoda opisana:

String::new 

s = String.new('abc') 
=> "abc" 
8

W języku Perl # służy do komentowania, a ponieważ Perl jest "przodkiem" Ruby, rola została przeniesiona.

Składnia "#{}" nazywa się „interpolacja” i funt został wybrany najbardziej prawdopodobne ponieważ interpolacja jest podobny w pewnym sensie do komentowania, bo zmieniają kontekst kodu (w tym przypadku do innego kontekstu dla realizacji)

Numer następujący po nazwie klasy ma na celu wskazanie, że następujący identyfikator jest metodą tej klasy i jest po prostu konwencją. Czytaj więcej na ten temat tutaj: Why are methods in Ruby documentation preceded by a hash sign?

1

Po prostu, aby pokazać wam przykład, że Ruby pokazuje metodę instancji poprzedzoną symbolem # i metody klas poprzedzone symbolem ..

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> 
1

:: ciekawe, to działa podobnie do . w które można wywołać metody poprzez zarówno

Car::is_hybrid? 

i

car.is_hybrid? 

Jak widać w większości kodu chociaż . jest preferowany dla metod.

Jednym z przypadków, w którym często preferowanym jest ::, jest stałe miejsce w klasie, które można zobaczyć w wywołaniach systemowych, takich jak Math::PI lub takich, które utworzysz, np.ThePentagon::NUMBER_OF_BUILDING_SIDES