2013-06-01 14 views
29

Bir süreliğine aradım ama bu sorunun cevabı boş çıktı. Tamsayı olan değişken X değişkeninin bir String'e basit komutu nedir?Scala'da Integer'i String'e nasıl atabilirim?

+9

Teknik olarak yapamazsınız. Döküm, yalnızca bir değerin farklı ancak uyumlu bir türe yeniden yorumlanmasıdır. Statik olarak bilinen değerin türünden daha genel bir türe dökülüyorsa her zaman başarılı olur. Değerin dönüştürüldüğü türün, statik olarak bilinen türden bir alt tür veya alt tür olmaması durumunda, * öğesinin * sahip olabileceği, ancak vermediği ve derleyici tarafından reddedildiği bir türe dönüştürülmesi dinamik olarak başarısız olabilir. 'Int' vs.' String' ikinci kategoriye girer. –

+0

Soruyu ifade etmenin doğru yolu, "Scala'daki bir Int'e nasıl bir * dönüştürebilirim?" Olacaktır. Sorunun nereden geldiğini hayal edebiliyorum: Java'da, ints nesneler değil, bu yüzden dönüştürme işlemini gerçekleştirmek için başka bir mekanizmaya ihtiyacınız var. Scala'da, * her şey bir nesnedir (yay!), Bu nedenle böyle özel durum mekanizmalarına ihtiyacınız yoktur; toString, * bir şeyi bir String'e dönüştürmenin yoludur. – AmigoNico

cevap

53

, onun dize temsilini almak için onun toString çağırabilir.

val x = 42 
x.toString // gives "42" 

Bu, dizeyi verir. Tabii ki, herhangi bir Scala "şey" üzerinde toString kullanabilirsiniz - Ben yüklü object kelime kaçınıyorum.

+1

Soruyu tatmin ettiğini düşünüyorsanız, kabul edilen cevabı işaretlemelisiniz. –

+0

@janm Radyeksi nasıl belirlerim? – Sohaib

+0

@Sohaib x.toHexString veya f "$ x% x", x.toOctalString veya f "$ x% o" - bkz. Https://docs.oracle.com/javase/6/docs/api/java/util/ Formatter.html # detail – danio

4

Yeterince basit mi? Eğer tip Int değişken x varsa

scala> val foo = 1 
foo: Int = 1 

scala> foo.toString 
res0: String = 1 

scala> val bar: java.lang.Integer = 2 
bar: Integer = 2 

scala> bar.toString 
res1: String = 2 
0

Bu basit durum için bir Int üzerinde toString yöntemini çağırmanın en iyi çözüm olduğunu düşünüyorum, ancak Scala'nın bu tür sorunlar için daha genel ve çok güçlü bir mekanizma sağladığını bilmek güzel.

implicit def intToString(i: Int) = i.toString 

def foo(s: String) = println(s) 

foo(3) 

Şimdi bunu dize olduğu gibi Int tedavi (ve Dize gerektirir yöntemlerde bir argüman olarak kullanarak), yapmanız gereken her şeyi Int String dönüştürmek yolu tanımlamaktır.

+0

Bu, tür güvenliğinden kaynaklanan erozyona uğradığından gizli dönüşümlerin kötüye kullanılması olur –

İlgili konular