Mam moduł, który zawiera klasę o nazwie String
(między innymi). Muszę wyszukać klasę według nazwy i z wdziękiem powrócić, jeśli nie ma takiej klasy.Czy można zawęzić ciągłe wyszukiwanie ruby?
module Mod1
module String
end
end
Mod1.const_get 'String'
#⇒ Mod1::String
Kernel.const_get '::Mod1::String'
#⇒ Mod1::String
jak dotąd, bardzo dobrze. Oczekuję otrzymania NameError
, gdy próbuję wyszukać nieistniejącą klasę, co jest w porządku. Problem polega na tym, że jeśli istnieje klasa o podanej nazwie istniejącego w globalnej przestrzeni nazw, jest ona zwracana:
Mod1.const_get 'Fixnum'
#⇒ Fixnum < Integer
Kernel.const_get '::Mod1::Fixnum'
#⇒ Fixnum < Integer
Rozumiem powody, ale moje pytanie byłoby: jest tam out-of -the-box metoda wyszukiwania stałej tylko w podanej przestrzeni nazw?
Teraz mogę sprawdzić wynik z
result.to_s.start_with?(namespace)
ale to na pewno nie jest to najbardziej wyrafinowane sposób zawęzić odnośnika.
Perfect, dzięki. Ewidentna porada "spójrz na dokumentację metody" działa tak jak zwykle. – mudasobwa
Czy mogę zaproponować linkowanie do dokumentów zamiast źródła MRI? http://ruby-doc.org/core-2.3.1/Module.html#method-i-const_get –