To pytanie jest omawiane na meta . Weźmy tam argumenty za lub przeciw zamykaniu / usuwaniu tego.
Adam Lear
63
@anotherordinary Prawdopodobnie powinieneś porzucić swojego przyjaciela jako nauczyciela programowania, jeśli on / ona pomyślałby, że powiedzenie ci tego byłoby dobrym sposobem na naukę tego języka. Zapamiętywanie lekceważących ciekawostek wcale nie jest przydatne. Znacznie mniej, gdy zaczynasz uczyć się języka.
czy ktoś próbuje utworzyć „IOJCC”? (google „IOCCC”)
Olivier Dulac,
1
@EnnoShioji Co to za „nieistotne ciekawostki”, o których należy pamiętać? Każdy, kto nazywa siebie programistą Java, powinien być w stanie to łatwo zrozumieć.
phant0m
Odpowiedzi:
154
_to nazwa klasy. To bardzo zagmatwane, ale działa!
W twoim get crazyprzykładzie jest kilka błędów . (1) zapomniałeś dodać średnik po ____=__(dwa razy), (2) jeśli próbujesz przeciążyć _metodę, musisz również przekazać typ, więc _(___)powinno być _(_ ___). Oto jak to może wyglądać class _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__ = ___;}}. Poczekaj minutę. Czy właśnie zdebugowałem podkreślenia? Czas na hamulec.
Pshemo
@Pshemo Lol, tak naprawdę nigdy nie chciałem traktować tego kodu poważnie: P fixed
tckmn
Uzyskaj +1 za komentarz do mojej odpowiedzi. Nie mogłem wymyślić innego sposobu na wynagrodzenie.
Ed Heal
71
_ to nazwa klasy, podkreślenie to poprawna nazwa zmiennej Java, wystarczy wciąć kod, aby go odszyfrować:
class_{
_ _;
_(){
_=this;
}
}
Lubić:
classA{
A A;
A(){
A=this;
}
}
Edycja: dzięki @Daniel Fischer
Nazwy typów i nazwy zmiennych mają różne przestrzenie nazw. i na przykład kod class FOO { FOO FOO; }jest ważny w Javie.
Ponadto każde zadeklarowane wyliczenie ma własną przestrzeń nazw. Identyczne nazwy różnych typów nie kolidują; na przykład metoda może mieć taką samą nazwę jak zmienna lokalna .
Nie ma pomyłki. Kompiluje się dobrze, gdy pisałem. Po prostu do tej pory tego nie rozumiałem.
kolejny zwykły
2
Nazwy typów i nazwy zmiennych @GrijeshChauhan mają różne przestrzenie nazw. class FOO { FOO FOO; }Pracuje.
Daniel Fischer
1
Na przykład w Haskell typy i wartości mają również różne przestrzenie nazw. Różnica polega na tym, że wielkość liter ma znaczenie, nazwa typu musi zaczynać się od dużej litery, więc nie możesz nazwać żadnej starej wartości, takiej jak typ, ale tylko konstruktory, ale data Foo = Foo | Bar Intdziała. Oczywiście może działać tylko w językach, w których można określić kategorię identyfikatora, z której się on pojawia.
Daniel Fischer
2
@anotherordinary przeczytaj moją zaktualizowaną odpowiedź Dodałem również link
Grijesh Chauhan
2
@GrijeshChauhan Widzę to. Dzięki :)
kolejny zwyczajny
12
cóż, to dobry przykład. W Javie unicode może być identyfikatorami, więc możesz napisać coś takiego:
class ⲥlass{
ⲥlass claѕѕ;
}
tutaj nazwa klasy c to 'ⲥ' (U + 2CA5 COPTIC MAŁA LITERA SIMA) i
nazwa obiektu to „” (U + 0455 CYRILLIC MAŁA LITERA DZE).
Nie możesz mieć zmiennej o nazwie class, to słowo kluczowe.
nickb
14
@nickb: to nie jest słowo kluczowe Java 'class'. jak już wspomniałem, nazwa obiektu 'claѕѕ'ma 'ss'znaki spoza ASCII. więc w rzeczywistości nazwa obiektu claѕѕbrzmi: cla\u0455\u0455'Myślę, że to wyjaśnia nieporozumienie. :)
Odpowiedzi:
_
to nazwa klasy. To bardzo zagmatwane, ale działa!Po zmianie nazwy klasy:
class Something {Something something;Something(){something=this;}}
I uporządkowane:
class Something { Something something; Something() { something=this; } }
I możesz oszaleć z tym dziwnym nazewnictwem
:)
class _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__=___;}}
W rzeczywistości Unicode jest nawet obsługiwany, więc jest to ważne:
class 合法類別名稱{合法類別名稱(){}}
źródło
get crazy
przykładzie jest kilka błędów . (1) zapomniałeś dodać średnik po____=__
(dwa razy), (2) jeśli próbujesz przeciążyć_
metodę, musisz również przekazać typ, więc_(___)
powinno być_(_ ___)
. Oto jak to może wyglądaćclass _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__ = ___;}}
. Poczekaj minutę. Czy właśnie zdebugowałem podkreślenia? Czas na hamulec._
to nazwa klasy, podkreślenie to poprawna nazwa zmiennej Java, wystarczy wciąć kod, aby go odszyfrować:class _{ _ _; _(){ _=this; } }
Lubić:
class A{ A A; A(){ A=this; } }
Edycja: dzięki @Daniel Fischer
Podsumowanie
_
to nazwa klasy, np. atclass _{
_
jest nazwą członka klasy, np. at_ _;
i_=this
_
to nazwa konstruktora, np. at_()
Pamiętaj: Java używa sześciu różnych przestrzeni nazw:
źródło
class FOO { FOO FOO; }
Pracuje.data Foo = Foo | Bar Int
działa. Oczywiście może działać tylko w językach, w których można określić kategorię identyfikatora, z której się on pojawia.cóż, to dobry przykład. W Javie unicode może być identyfikatorami, więc możesz napisać coś takiego:
class ⲥlass { ⲥlass claѕѕ; }
tutaj nazwa klasy c to 'ⲥ' (U + 2CA5 COPTIC MAŁA LITERA SIMA) i
nazwa obiektu to „” (U + 0455 CYRILLIC MAŁA LITERA DZE).
źródło
class
, to słowo kluczowe.'class'
. jak już wspomniałem, nazwa obiektu'claѕѕ'
ma'ss'
znaki spoza ASCII. więc w rzeczywistości nazwa obiektuclaѕѕ
brzmi:cla\u0455\u0455'
Myślę, że to wyjaśnia nieporozumienie. :)