Bramy zakresów w Ruby: Część I

.

Mehdi Farsi

Follow

Sep 2, 2019 – 3 min read

W tym artykule będziemy badać następujące tematy:

  • zakres metod
  • zakres klas

Przed rozpoczęciem

Jestem zachwycony, że mogę podzielić się z Wami naszym najnowszym projektem: Fun Facts about Ruby – Volume 1

Please feel free to spread the word and share this post! 🙏

Dziękuję za poświęcony czas!

W Rubim, zakres programu jest silnie skorelowany z wartością self.

W tym miejscu wyszczególnimy jakie są wartości self kiedy jesteśmy w metodzie, klasie i w zakresie najwyższego poziomu.

Zakres metody

W Rubim, zakres najwyższego poziomu jest kontekstem obiektu main.

W tym momencie self odnosi się do obiektu main.

Nie krępuj się przeczytać artykułu Ruby Object Model jeśli nie jesteś zaznajomiony z obiektem main.

Teraz, jaki jest kontekst self wewnątrz metody zdefiniowanej w zakresie najwyższego poziomu?

Tutaj widzimy, że self również odnosi się do obiektu main.

Jedyną różnicą jest to, że nie mamy dostępu do zmiennych lokalnych zadeklarowanych w zakresie najwyższego poziomu wewnątrz naszej metody.

Wynika to z faktu, że słowo kluczowe def osadza zawartość metody w całkowicie izolowanym zakresie.

Jednakże nasza metoda może uzyskać dostęp do zmiennych instancji zadeklarowanych w zakresie najwyższego poziomu.

Ponieważ zmienne instancji są zadeklarowane na poziomie obiektu, możemy uzyskać dostęp do tych zmiennych w innym zakresie, w którym self odnosi się do tego samego obiektu – obiektu main w naszym przypadku.

Tak więc, ponieważ self wskazuje na main zarówno w zakresie najwyższego poziomu, jak i w metodzie zdefiniowanej w zakresie najwyższego poziomu, możemy uzyskać dostęp do zmiennej instancji @instance_variable w metodzie hello.

Zakres klasy

Gdy używamy słowa kluczowego class:

  • zmienia się wartość self
  • zawartość klasy zostaje osadzona w izolowanym zakresie

Przyjrzyjrzyjmy się następującemu przykładowi

Widzimy, że w naszej klasie self ma inną wartość – odnosi się do klasy Hello.

Nie mamy również dostępu do zmiennych i metod zdefiniowanych poza klasą.

Zauważmy, że mamy dostęp do zmiennych instancji w metodach instancji z tych samych powodów, które zostały opisane w pierwszej części artykułu.

W części II & III, będziemy bawić się zakresami wykorzystując moduły, klasy zagnieżdżone oraz bloki (FLAT SCOPES).

Voilà !

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.