Jeśli mam instancję obiektu, czy istnieje sposób sprawdzenia, czy mam obiekt singleton, a nie instancję klasy? Czy jest jakaś metoda, która może to zrobić? Może być jakieś odbicie API? Wiem, że jedną różnicą jest to, że nazwa klasy obiektu singleton kończy się na $
, ale nie jest to ścisły sposób.W scala, czy istnieje sposób sprawdzenia, czy wystąpienie jest obiekt singleton, czy nie?
10
A
Odpowiedz
22
Tak, używając mało udokumentowane scala.Singleton
typ:
def isSingleton[A](a: A)(implicit ev: A <:< Singleton = null) =
Option(ev).isDefined
, a następnie:
scala> val X = new Foo(10)
X: Foo = [email protected]
scala> object Y extends Foo(11)
defined object Y
scala> isSingleton(X)
res0: Boolean = false
scala> isSingleton(Y)
res1: Boolean = true
Moja isSingleton
metoda jest tylko wykazanie, że dostarcza wartość Runtime logiczną, która mówi, czy też nie wyrażenie jest statycznie wpisywane jako typ singleton, ale można także użyć Singleton
jako dowodu podczas kompilacji, że typ jest typem singleton.
0
Oto co znalazłem najlepsze rozwiązanie tego problemu:
import scala.reflect.runtime.currentMirror
def isSingleton(value: Any) = currentMirror.reflect(value).symbol.isModuleClass
bazę na How to determine if `this` is an instance of a class or an object?
Powiązane problemy
- 1. Czy istnieje sposób sprawdzenia, czy komponent reagowania nie jest podłączony?
- 2. Podczas debugowania istnieje sposób sprawdzenia, czy obiekt jest inną instancją?
- 3. Czy istnieje sposób sprawdzenia, czy zmienna jest zdefiniowana w Javie?
- 4. Czy istnieje lepszy sposób sprawdzenia, czy plik jest zapisywany?
- 5. Czy istnieje sposób sprawdzenia, czy wybór HTML jest obecnie otwarty?
- 6. Czy istnieje sposób sprawdzenia, czy alarm jest już ustawiony?
- 7. Czy istnieje prosty sposób sprawdzenia, czy obiekt jest serializowany JSON w python?
- 8. Czy istnieje sposób sprawdzenia, czy funkcja działa w gotowym dokumencie, czy nie?
- 9. Jaki jest najlepszy sposób sprawdzenia, czy obiekt jest tablicą, czy nie w JavaScript?
- 10. Java - Najszybszy sposób sprawdzenia, czy URL istnieje
- 11. Scala: czy istnieje sposób tworzenia typów wbudowanych?
- 12. pytoniczny sposób sprawdzenia, czy coś istnieje?
- 13. Jaki jest najlepszy sposób sprawdzenia, czy URL istnieje w PHP?
- 14. Lepszym sposobem sprawdzenia, czy ścieżka istnieje, czy nie w PowerShell
- 15. W groovy, czy istnieje sposób sprawdzenia, czy obiekt ma daną metodę?
- 16. Czy istnieje sposób sprawdzenia, czy dwa elementy DOM są równe?
- 17. Czy istnieje sposób sprawdzenia, czy operacja OpenGL została zakończona?
- 18. Czy istnieje sposób sprawdzenia, czy odebrano transmisje LocalBroadcastManager?
- 19. Czy istnieje sposób sprawdzenia, czy próbka została skonfigurowana dla członka?
- 20. Czy istnieje sposób sprawdzenia, czy wymuszono tryb ścisły?
- 21. Czy istnieje sposób sprawdzenia, czy ReactElement renderuje wartość "null"?
- 22. Czy istnieje sposób sprawdzenia, czy element zakończył przejście CSS3?
- 23. Czy istnieje sposób sprawdzenia, czy zdefiniowano funkcję VBScript?
- 24. Czy istnieje sposób sprawdzenia, czy komponent bean jest zdefiniowany w kontekście sprężyny?
- 25. Czy istnieje sposób sprawdzenia, ile parametrów jest wymaganych dla metody?
- 26. Jaki jest najlepszy sposób sprawdzenia, czy istnieje atrybut?
- 27. Czy istnieje nazwa oznaczająca "nie singleton"?
- 28. Czy istnieje uniwersalny sposób sprawdzenia, czy użytkownik trzyma klawisz CTRL, czy nie?
- 29. Czy istnieje sposób sprawdzenia, czy istnieje wiele powiązań istnieje w Rails 3.1?
- 30. Jaki jest najlepszy sposób sprawdzenia, czy atrybut istnieje i czy jest ustawiony?
Dlaczego nie użyć 'ev ne null' zamiast' Option (EV) .isDefined'? – Clashsoft
@Clashsoft Brak konkretnego powodu. Wartość domyślna 'null' jest typem hackowania, a ponieważ tak naprawdę nie jest to kwestia, chciałem po prostu zachować inne zasady, jak to tylko możliwe. –
Co więcej, jesteś pewien, że 'scala.Singleton' (nadal) istnieje? Nie ma go w dokumentacji "2.11" i nie można go znaleźć również w repozytorium GitHub? Może mógłbyś dodać link? – Clashsoft