0

Ruby では、私の関数はnil 以外の値をfunc返すnil場合に戻ります。の値を返すmyfunction1ことをどういうわけか期待します。つまり、実行されなくても代入の値を取得します。funcrc

def func
    rc = myfunction1
    rc = myfunction2 if rc.nil?
end

これを拡張funcすると、func期待どおりに機能します。

def func
    rc = myfunction1
    rc = myfunction2 if rc.nil?
    rc
end

自分で試してみるための簡易版を次に示します。

def func
    rc = 3
    rc = myfunction2 if rc.nil?  # returns nil but rc has value 3
end

この動作には特定の理由がありますか?

4

3 に答える 3

2

簡略化した例を見ていきましょう。

  1. 3に設定rcします。
  2. 次の行で、がであるかどうかを確認しますrcnil、明らかにそうではありません。
  3. elseしたがって、割り当ては実行されず、分岐がないため、式はに評価されnilます。
  4. これはメソッドの最後の式であるため、nilが返されます。

いずれにせよ戻りたいrc場合は、2番目のフォームに頼るか、次のようにメソッド全体を作成する必要があります。

def func
  myfunction1 || myfunction2
end

これは明らかにfalse、の可能な戻り値ではない場合にのみ機能しますmyfunction1。もしそうなら、あなたはこれを行うことができます:

def func
  rc = myfunction1
  rc.nil? ? myfunction2 : rc
end
于 2012-08-17T12:02:45.493 に答える
0
if cond then expr end

cond が false の場合は nil を返し、cond が true の場合は expr の値を返します。

if cond then expr_if else expr_else end

cond が false の場合は expr_else を返します。

これができる理由です(たとえば)

value = if den != 0 then
         val / den
      else 0
      end
于 2012-08-17T14:14:50.937 に答える