2013-04-02 13 views
6

Pracuję nad niektórymi rozszerzeniami dla Rebol 3 (posix/fann/math).Rebol, rozszerzenia i nazewnictwo funkcji

Aby uniknąć zanieczyszczenia globalnej przestrzeni nazw, eksportuję funkcje za pomocą prostego identyfikatora źródła prefiksu. Na przykład: POSIX-FORK dla fork lub POSIX-NANOSLEEP dla nanosleep.

Czy istnieje jakieś lepsze podejście lub oficjalna konwencja nazewnictwa Rebol?

Odpowiedz

6

To dość standardowa konwencja nazewnictwa dla eksportów Rebol, choć oczywiście powinny one być pisane małymi literami. Wielkie znaczenie ma tylko konwencja nazewnictwa w odniesieniu do funkcji w klientach czata lub witrynach internetowych, które nie mogą wyświetlać kodu takiego jak this. Zazwyczaj nie wpisujesz wielkich liter w kod Rebol, chyba że są one użyte do czegoś innego.

Jeśli jednak chcesz uniknąć globalnego zanieczyszczenia przestrzeni nazw, zadeklaruj swój moduł rozszerzenia za pomocą nagłówka options: [private]. To sprawi, że eksport twojego modułu zostanie zaimportowany tylko przez moduły lub skrypty, które zażądają ich bezpośrednio pod nagłówkiem import lub needs. Dotyczy to w szczególności modułów lub rozszerzeń eksportujących niskopoziomowe interfejsy podobne do języka C, które najlepiej importować tylko przez moduły implementujące owijacze wysokiego poziomu. Warto pamiętać, że część modułu rozszerzenia jest pełnym modułem Rebol i często najlepiej jest umieścić tam kod opakowania wysokiego poziomu, a nie eksportować wszystkich funkcji podobnych do C, zachowując je do użytku wewnętrznego.

Dodatkową sztuczką jest to, że podczas eksportowania stałych lub wartości wyliczeniowych najlepiej umieścić je w obiekcie w module i wyeksportować obiekt. W ten sposób nie eksportujesz do globalnej przestrzeni nazw i możesz chronić słowa przed modyfikacją.

Inną sztuczką jest nie eksportowanie żadnych rzeczy, a ludzie mogą importować moduł za pomocą funkcji import. Dopóki słowa modułu nie zostaną oznaczone jako ukryte, nadal będą dostępne, nawet jeśli nie zostaną wyeksportowane. W większości przypadków jest to trochę niewygodne, więc lepiej użyć prywatnego modułu. Możesz także wyeksportować interfejs API wysokiego poziomu i , a nie wyeksportować interfejs API niskiego poziomu, aby interfejs API niskiego poziomu był dostępny do zaimportowania, jeśli ktoś zechce go użyć.

Sprawdź tutaj dokładniejszej odpowiedzi na temat sposobu wykorzystywane są moduły i rozszerzenia: How are words bound within a Rebol module?

+0

Dziękuję za wyjaśnienie, link jest dobrze napisana i warto przeczytać. – TomBon