13

があり@obj.items_per_page、これは20最初にあり、以下のメソッドで値を割り当てたいのは、そうでない場合のみmany_itemsですnil:

def fetch_it_baby (many_items = nil)
    @obj.items_per_page = many_items

上記のコードでは、 が であってもmany_itemsnilまま@obj.items_per_pageです20。なんで?そして、それは「良い」コーディングですか?次のようなものを使用するべきではありませんか

@obj.items_per_page = many_items || @obj.items_per_page

それとも第三の方法がありますか?私はどちらの方法でも完全に快適ではありません。

4

8 に答える 8

21

私が一般的に見ているスタイルは次のようになります。

@obj.items_per_page = many_items if many_items

これは、負または二重負の条件を回避しながら、インライン条件を使用します。

于 2013-10-01T10:53:51.650 に答える
13

呼び出し元が呼び出しで指定しなかった場合に備えて、割り当てのデフォルト値があることが明確になるため、次のことをお勧めしますmany_items

def function(argument = nil)
  variable = argument || 20
  ...
end

ただし、値が でない場合にのみ割り当てが行われるように指定したため、値nilを確認する必要があります。そのケースが本当に必要な場合、解決策はより長くなります。nilfalse

def function(argument = nil)
  variable = argument.nil? ? 20 : argument
  ...
end
于 2013-10-01T10:59:33.990 に答える
12

使用できます( nilまたはfalseの場合にのみ代入に使用される&&=のと同じ方法で)||=

> a = 20    # => 20 
> a &&= 30  # => 30
> a         # => 30
> a = nil   # => nil
> a &&= 30  # => nil
> a = false # => false
> a &&= 30  # => false
> a = {}    # => {}
> a &&= 30  # => 30
于 2015-07-24T21:34:57.067 に答える
10

many_items が nil でも @obj.items_per_page は 20 のまま

新しい値@objが. これは標準の Ruby ではありません。たとえば、次の定義があるとします。items_per_page=nil

class Demo
  attr_accessor :items_per_page
end

私はこの動作を取得します:

irb(main):005:0>     demo = Demo.new           #=> #<Demo:0x007fb7b2060240>
irb(main):006:0>     demo.items_per_page = 20  #=> 20
irb(main):007:0>     demo.items_per_page       #=> 20
irb(main):008:0>     demo.items_per_page = nil #=> nil
irb(main):009:0>     demo.items_per_page       #=> nil

あなたの例については、おそらく次のように書きます。

@obj.items_per_page = many_items unless many_items.nil?
于 2013-10-01T10:59:23.123 に答える