2013-06-01 9 views
29

私はしばらくの間、この質問に対する答えを探しましたが、空になりました。 変数XをInteger型のStringにキャストする簡単なコマンドは何ですか?スカラーでIntegerをStringにキャストする方法はありますか?

+9

技術的にはできません。キャスティングは、異なるが互換性のある型への値の再解釈に過ぎません。静的に知られている型よりも一般的な型にキャストすると、常に成功します。値がキャストされている型が静的に既知の型のスーパータイプもサブタイプでもない場合、値*が持つことができる型にキャストすると動的に失敗する可能性がありますが、コンパイラによって拒否されます。 'Int'と' String'は後者のカテゴリに分類されます。 –

+0

質問をフレーズする正しい方法は、「スカラのIntを* Stringに変換するにはどうすればいいですか?」です。私は疑問がどこから来るのか想像することができます:Javaでは、intはオブジェクトではないので、変換を実行するための他のメカニズムが必要です。 Scalaでは、* everything *はオブジェクトです(そうです)。そのような特殊なメカニズムは必要ありません。 toStringは* anything *をStringに変換する方法です。 – AmigoNico

答えて

53

、あなたはその文字列表現を取得することにtoStringを呼び出すことができます。

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

それはあなたに文字列を与えます。もちろん、toStringをScalaの「もの」に使うことができます。ロードされたobjectという単語は避けています。

+1

質問に満足していると思われる場合は、回答に同意する必要があります。 –

+0

@janm基数を指定するにはどうすればよいですか? – Sohaib

+0

@Sohaib x.toHexStringまたはf "$ x%x"、x.toOctalStringまたはf "$ x%o" - https://docs.oracle.com/javase/6/docs/api/java/util/を参照してください。 Formatter.html#detail – danio

4

これで十分ですか?あなたがタイプIntの変数xを持っている場合は

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

私は、IntのtoStringメソッドを呼び出すことが最良の解決策であると考えていますが、Scalaがこの種の問題に対してより一般的で非常に強力なメカニズムを提供していることは知っておいてよかったです。

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

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

foo(3) 

は今、あなたはそれが文字列だったとしてのIntを扱う(と文字列を必要とする方法で引数としてそれを使用する)ことができ、あなたがしなければならないすべてはあなたがのInt Stringに変換する方法を定義することです。

+0

型の安全を侵食するため、これは暗黙的な変換を悪用することになります –

関連する問題