こんにちは!rubyでswiftのif let hoge = anyObject as? Hogeのような書き方は出来ますか?よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
たぶんこうするしか無いと思います。
lang
1def foo(arg) 2 if (int_arg = arg).is_a? Integer 3 something(int_arg) 4 end 5end
投稿2015/12/22 01:59
編集2015/12/22 02:00総合スコア1342
0
Rubyの変数には型がないので、(ダウン)キャストは不要です。
おそらくオブジェクトのクラスを知りたいのだと思いますが、
・変数が示すオブジェクトのクラスを知りたい時は、class
メソッドを使います。
・真偽で答えが欲しい場合は、instance_of?
メソッドか、kind_of?
is_a?
メソッドを使います。
・特定のメソッドが備わっているかは、respond_to?
メソッドを使います。
Ruby
1a=1 2p a.class #=> Fixnum 3p a.instance_of? Fixnum #=> true 4p a.instance_of? Numeric #=> false 5p a.is_a? Numeric #=> true ( FixnumはNumericの子孫クラス == a はNumericの一種 ) 6 7p a.respond_to? :abs #=> true ( a.abs というメソッド呼び出しができる ) 8p a.respond_to? :downcase #=> false ( a.downcase というメソッド呼び出しはNoMethodErrorになる ) 9
投稿2015/12/21 04:26
編集2015/12/21 04:36総合スコア84423
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
ご回答有り難うございます!確かにダウンキャストは必要ないですね。
以下の様な感じで、any_objectだった変数名をfixnumのように置き直したいかつ、それを一行でかけると嬉しいなと思っています。それでpは1と表示されると嬉しいです。
any_object=1
if fixnum = any_object.hoge? Fixnum
p fixnum
end
2015/12/21 14:55
何をしたいのか不明です。「置き直したい」?代入なら、
fixnum = any_object
でいいです。
代入のことでないなら、「置き直したい」とかじゃなくてプログラミングの言葉で表現してください。
2015/12/22 11:10
「どのクラスのオブジェクトか分からないもの」が整数の時だけあることをしたい
ということであれば、回答に書いた通り、is_a? を使って、
if any_object.is_a? Integer
p any_object
end
ですね。代入し直す必要はありませんし、代入し直さない方が良いです(無意味に変数を増やさない)。
2015/12/22 15:18
ありがとうございます!
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/22 04:31