2012-05-29 7 views
10

Właśnie znalazłem jakiś kod scala który ma dziwną nazwę klasy: nazwaChłodny klasy i nazwy metod owinięte w ``: class `To jest fajna klasa` {}?

class `This is a cool class` {} 

i metoda:

def `cool method` = {} 

możemy użyć kary dla klasy lub metody imieniu!

To bardzo fajne i przydatne dla testów jednostkowych:

class UserTest { 
    def `user can be saved to db` { 
     // testing 
    } 
} 

Ale czemu możemy to zrobić? Jak to zrozumieć?

Odpowiedz

15

Ta funkcja istnieje dla zapewnienia interoperacyjności. Jeśli Scala ma zarezerwowane słowo (na przykład with), nadal możesz odwoływać się do kodu z innych języków, które używają go jako metody lub zmiennej lub czegoś podobnego, za pomocą zwrotnych.

Ponieważ nie było powodu, aby zakazywać prawie dowolnych ciągów, można użyć niemal dowolnych ciągów.

+2

+1 za podanie * przyczyny * odpowiedzi na pytanie, dlaczego znajdują się tam kolejne linki. – Frank

+0

Mam przeczucie, że przypadek użycia instrukcji operacyjnych również mógł zostać uznany, w przeciwnym razie do oznaczenia cytowanego identyfikatora konieczny byłby tylko jeden symbol podobny do tego, jak C# robi to –

+0

@jk. - Tylko jeśli leksykon Scala działa tak samo jak wszyscy inni. Specyfikacja JVM pozwala prawie wszystko jako nazwę metody. Nie jestem pewien, czy Scala jest wystarczająco inteligentna, aby sprawdzić zarówno kodowanie symboli kompatybilne z Javą (np. Przestrzeń staje się $ u0020), jak i wersję nieprzetworzoną, ale może być napisane, jeśli ktoś napisał język, który umieścił niestandardowe znaki w nazwach metod. –

2

Struny owinięte w ` są poprawnymi identyfikatorami w Scali, nie tylko dla nazw klas i metod, ale również dla funkcji i zmiennych.

1

Dla mnie jest to po prostu, że parser i kompilator zostały zbudowane w sposób, który umożliwia to, więc zespół Scala zaimplementował go.

Myślę, że może być fajnie, aby programista mógł nadawać prawdziwe nazwy funkcjom zamiast getThisIncredibleItem lub get_this_other_item.

Dzięki za pytania, które nauczyły mnie czegoś nowego w Scala!

5

SCALA Language Specification:

Istnieją trzy sposoby, aby utworzyć identyfikator. Po pierwsze, identyfikator może zacząć od litery, po której może następować dowolna sekwencja liter i cyfr. Po nim mogą pojawić się podkreślenia "_" znaków oraz inny ciąg złożony z liter i cyfr lub ze znaków operatora . Po drugie, identyfikator może zaczynać się od znaku operatora, po którym następuje arbitralna sekwencja znaków operatora. Poprzednie dwie formy są nazywane zwykłymi identyfikatorami. Wreszcie, identyfikator może być również utworzony przez arbitralny ciąg znaków pomiędzy back-quotes (systemy hosta mogą narzucać pewne ograniczenia, dla których ciągi są legalne dla identyfikatorów). Identyfikator składa się wówczas z wszystkich znaków, wyłączając same kopie.

7

Zgodnie z odpowiedzią @Rex Kerr ta funkcja służy do zapewnienia współdziałania.Na przykład,

wywołać metodę java,

Thread.yield() 

trzeba napisać

Thread.`yield`() 

od yield jest kluczowe w Scala.

Powiązane problemy