2012-01-16 10 views

Odpowiedz

52

Z jakiegoś powodu ludzie odnoszą się do tej linii jako magiczny komentarz. Przed przetworzeniem kodu źródłowego tłumacz czyta tę linię i ustawia odpowiednie kodowanie. Jest to dość powszechne w przypadku interpretowanych języków, w które wierzę. Przynajmniej Python używa tego samego podejścia.

Można określić kodowanie na wiele różnych sposobów (niektóre z nich są uznawane przez redakcję):

# encoding: UTF-8 
# coding: UTF-8 
# -*- coding: UTF-8 -*- 

można przeczytać kilka ciekawych rzeczy na temat kodowania źródłowego w this article.

Jedyną rzeczą, o której wiem, że ma podobną konstrukcję jest shebang, ale jest ona ogólnie związana z powłokami Uniksa i nie jest specyficzna dla języka Ruby.

+0

Pod pewnymi względami, konstrukcja ta jest podobna do [ "magicznej liczby"] (http://en.wikipedia.org/wiki/Magic_number_ (programowanie \)). Termin "magiczny komentarz" wydaje się być powiązany. –

+1

To "magia" w sposobie, że komentarze są zwykle całkowicie ignorowane przez tłumacza. Obecność/nieobecność tego komentarza ma jednak znaczenie, dlatego jest "magiczna", ponieważ NIE jest ignorowana przez tłumacza. – NobodysNightmare

+0

"Wszystkie skrypty Ruby są teraz domyślnie kodowane w UTF-8" z https://www.engineyard.com/blog/whats-new-and-awesome-in-ruby-2 –

13

Ten magiczny komentarz informuje Ruby o kodowaniu źródłowym aktualnie parsowanego pliku. Ponieważ Ruby 1.9.x domyślnie przyjmuje wartość US_ASCII, musisz poinformować tłumacza o kodowaniu kodu źródłowego, jeśli używasz znaków spoza ASCII (takich jak umlauty lub znaki akcentowane).

Komentarz musi być pierwszym wierszem pliku (lub poniżej nazwy, jeśli jest używany) do rozpoznania.

Istnieją inne ustawienia kodowania. Aby uzyskać więcej informacji, patrz this question.

Od wersji 2.0 Ruby domyślnie przyjmuje kodowanie UTF-8 pliku źródłowego. W związku z tym, ten magiczny kodowany komentarz stał się rzadkim widokiem na wolności, jeśli mimo to napiszesz swój kod źródłowy w UTF-8.

6

Jak zauważyłeś, magiczne komentarze są specjalnymi konstrukcjami preprocesora. Muszą być zdefiniowane na górze pliku (chyba, że ​​na górze jest już unix shebang). Od wersji Ruby 2.3 są trzy rodzaje magicznych komentarzy:

  • Kodowanie komentarza: zobacz inne odpowiedzi. Zawsze musi być pierwszym magicznym komentarzem. Musi być zgodny z ASCII. Ustawia kodowanie źródłowe, więc napotkasz problemy, jeśli rzeczywista kodowanie pliku nie pasuje do określonego kodowania
  • frozen_string_literal: true: zawiesza wszystkie literały ciągów znaków w bieżącym pliku
  • warn_indent: true: Aktywuje ostrzeżenia wcięć dla bieżącego pliku

Więcej informacji: Magic Instructions