2

次の Ruby コードを短くし、同時に読みやすくすることはできますか?

height = do_some_calc
height = 128 if height == 0
4

6 に答える 6

7
height = 128 if 0 == height = do_some_calc

do_some_calc一度だけ評価する必要がある場合、それが私が知っている唯一の方法です。

于 2010-11-05T03:42:19.117 に答える
2

do_some_calc0 の代わりに false または nil を返すように変更する意思がある場合は、問題ありません。

height = do_some_calc || 128

do_some_calc が通常は 0 を返すときに false または nil を返すように変更できない場合は、それをラップできますが、長期的には多くの文字を節約できません。デフォルトを設定する場所がたくさんある場合を除いて。

do_some_calc が 0 を返した場合、このラッパーは false を返し、それ以外の場合は do_some_calc の出力を返します。

def my_do_some_calc
   temp = do_some_calc 
   temp != 0 && temp
end

すべてをまとめると、次のようになります。

height = my_do_some_calc || 128
于 2010-11-05T04:34:35.430 に答える
1

短いですか?機能しないでください。

  height = (h = do_some_calc).zero? ? 128 : h 

のように:

def do_some_calc
  rand 100
end

10.times do 
  height = (h = do_some_calc).zero? ? 128 : h 
  puts height
end
# >> 3
# >> 95
# >> 89
# >> 82
# >> 31
# >> 4
# >> 82
# >> 99
# >> 11
# >> 64
于 2010-11-05T03:52:36.673 に答える
0

たぶん、次のようなものです:

STANDARD_HEIGHT = 128
def do_some_calc
  height = 0
  #calculate our height...
  height = height == 0 ? STANDARD_HEIGHT : calculated_height
end

には、より多くのコンテキストを指定する必要があると思います128。したがって、定数です。またdo_some_calc、それが 0 に等しい場合、実際には に等しいはずであるという事実を隠す必要があると思いますDEFAULT_HEIGHT

編集:あなたの暗黙の質問(私がそのように編集したもの)に答えるために、do_some_calc長くすることで短くすることができます.

于 2010-11-05T03:50:13.137 に答える
0

次のようにできます

height = do_some_calc.zero? ? 128 : do_some_calc 
于 2010-11-05T04:33:50.127 に答える
-4

非常に読みにくい場合でも、これは技術的には短くなります。

(height = do_some_call) == 0 and height = 128

あなたのやり方が最も簡潔で読みやすいようです。

于 2010-11-05T04:35:19.613 に答える