2017-01-30 11 views
6

Używając Julia, chciałbym niezawodnie przekonwertować dowolny typ na typ String. Wydaje się, że są dwie metody konwersji w wersji v0.5: albo string albo konstruktor String. Problem polega na tym, że musisz wybrać właściwy, w zależności od typu wejścia.Jak przekonwertować dowolny typ na String w Julia

Na przykład typeof(string(1)) ocenia się na String, ale String(1) zgłasza błąd. Z drugiej strony, typeof(string(SubString{String}("a"))) ocenia się na Substring{String}, która nie jest podtypem String. Zamiast tego musimy wykonać String(SubString{String}("a")).

Więc wydaje się, że jedynym wiarygodnym sposobem na konwersję dowolnego wejścia x wpisać String jest poprzez konstruktu:

String(string(x)) 

który czuje się nieco kłopotliwe.

Czy tu czegoś brakuje?

+2

Dlaczego trzeba 'String' przy wykluczeniu wszystkich innych' AbstractString's? Idealnie nie powinieneś dbać o dokładny typ łańcucha. –

+0

@MattB. Nie ma żadnego powodu, dla którego zauważyłeś, że powinienem używać 'AbstractString' w moich definicjach typów ... :-) Dla zachowania kompletności, oznacza to, że' String (string (x)) 'jest najbardziej niezawodny sposób na uzyskanie typu "String"? –

Odpowiedz

3

Powinieneś rzadko potrzebować jawnej konwersji na String. Zwróć uwagę, że nawet jeśli twoje definicje typów mają pola String lub twoje macierze mają konkretny typ elementu String, nadal możesz polegać na niejawnej konwersji.

Na przykład, oto przykłady niejawna konwersja:

type TestType 
    field::String 
end 

obj = TestType(split("x y")[1]) # construct TestType with a SubString 
obj.field # the String "x" 

obj.field = SubString("Hello", 1, 3) # assign a SubString 
obj.field # the String "Hel" 
Powiązane problemy