PHP で、あるデータが存在したら、その値を代入するというのを


$xxxx = isset($aaa) ? $aaa :"";

のように書きますが、Ruby ではどう書くのでしょうか? aaa を2回書くのが嫌なのですが、Ruby では一回ですむ書き方あるのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/09/21 16:15:42
  • 終了:2007/09/28 16:20:03

回答(2件)

id:Bookmarker No.1

しおり回答回数191ベストアンサー獲得回数342007/09/21 18:27:16

ポイント35pt

同じように書くと、

xxxx = defined?(aaa) ? aaa : ''

です。

Rubyリファレンスマニュアル - クラス/メソッドの定義 - defined?


1回で済ます方法はないことはないですが、良い方法ではないと思います。

xxxx = aaa rescue ''

Rubyリファレンスマニュアル - 制御構造 - rescue修飾子


他の方法は思い付きませんでした。

id:isogaya

aaa = false のときだめですね。。。

2007/09/22 10:09:27
id:kent0608 No.2

kent0608回答回数220ベストアンサー獲得回数232007/09/22 09:05:21

ポイント35pt

xxxx = aaa || ""

aaaがnilかfalseならば、""がxxxxに代入されます。

aaaが何らかのオブジェクトを参照していれば、xxxxにはaaaが代入されます。

http://d.hatena.ne.jp/snoubou/20070809/1186623146

id:isogaya

残念。

未定義だとエラーです。

undefined local variable or method `aaa' for main:Object (NameError)

2007/09/22 10:07:32
  • id:Bookmarker
    > aaa = false のときだめですね。。。

    何が駄目なんでしょうか?
    「aaa = false」の時に xxxx に false が代入されるのが駄目なんでしょうか?
  • id:isogaya
    おっと、そうですね。false の場合は値がはいっているからオッケーですね。機能的には、rescue 使うのが正解のような気がします。配列のときには、

    a=[1,2,5]
    #xxx = a[10] || "neko"
    xxx = a[10] rescue "neko"
    puts xxx

    で試すと、nil になりますね。
    nil false 未定義を一緒に扱うのはちょっと難しいかな。
  • id:Bookmarker
    配列の場合は fetch メソッドが使えます。

    >||
    a = [1,2,5]
    xxx = a.fetch(10) rescue 'neko'
    p xxx # => "neko"
    ||<

    http://www.ruby-lang.org/ja/man/?cmd=view;name=Array#fetch
  • id:Bookmarker
    あっ、
    >||
    xxx = a.fetch(10, 'neko')
    ||<
    の方が良いですね。
  • id:isogaya
    うお、こんな書き方あるんですね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません