Co to za kontstrukcja

Cześć zaczynam dopiero z RoRem jak i samym Rubym i zastanawiam sie co to za konstrukcja

        <%= f.label :title %><br>
        <%= f.text_field :title %>

konkretnie chodzi mi o “:title” co to za operator chodzi tu o wywołanie funkcji? Prosiłbym o odpowiedź łopatologiczną a najlepiej w nawiązaniu do C++ o ile można.

jeżeli widzisz jakąś wartość poprzedzoną : oznacza to że masz do czynienia z symbolem. :title jest tutaj argumentem do metody label

Symbol jest typem danych, który ma taką ciekawą właściwość, że ma jednoznaczną tożsamość w przeciwieństwie do stringów. Jeżeli widzisz dwa stringi, które wyglądają identycznie to wcale nie znaczy, że są one tożsame, gdyz mogą to być dwa zupełnie różne obiekty klasy String. Przykład:
irb(main):001:0> ‘abc’.object_id == ‘abc’.object_id
=> false
irb(main):002:0> :abc.object_id == :abc.object_id
=> true
Ilekrotnie byś nie używał symbolu :abc to istnieje on w pamięcie raz - jest jednoznacznie określony podobnie jak liczba. Dlatego jest wygodny w użyciu w tablicach asocjacyjnych jak i jako przekazywanie parametrów metod.
(zresztą wywołanie metody to jest tak naprawdę wysłanie symbolu do obiektu i parametru: 1.send(:+, 2) => 3)

czyli taki sam symbol z dwóch różnych klas jest tym samym symbolem? tak jakby zmienna statyczną?

Tak. Symbol jest zawsze taki sam w obrębie działania danej maszyny wirtualnej. Na symbol nie należy patrzeć jak na zmienna a jak na wartość czyli tak jak na liczbe 1 lub string "Ala".

http://ruby-doc.org//core-2.2.0/Symbol.html

W skrócie: symbol to niemodyfikowalny string, który przez to nie ma metod, które ma zwykły łańcuch znakowy. W Rubim string “Test” wcale nie jest tym samym obiektem, co inny string “Test”. W przypadku symboli :test to :test.

Nie nazywałbym tego “niemodyfikowalnym stringiem” gdyż to sugeruje, że jest to podobne do klasy String. Natomiast symbolom bliżej do Fixnum niż do Stringów. Reszta ok :wink: