28

私はRubyを初めて使用し、少し混乱する何かに出くわしました。

メソッドシグネチャにデフォルトのパラメータ値を設定しました。

メソッドを呼び出すときに、nilそのパラメーターに引数を渡しました。

しかし、デフォルト値は割り当てられていません。それは残っnilた。

# method with a default value of 1000 for parameter 'b'
def format_args(a, b=1000)
  "\t #{a.ljust(30,'.')} #{b}"
end

# test hash
dudes = {};
dudes["larry"] = 60
dudes["moe"] = nil

# expecting default parameter value
puts "Without nil check:"
dudes.each do |k,v|    
  puts format_args(k,v)
end

# forcing default parameter value
puts "With nil check:"
dudes.each do |k,v|    
  if v 
    puts format_args(k,v)
  else 
    puts format_args(k)
  end
end

出力:

Without nil check:
     larry......................... 60
     moe........................... 
With nil check:
     larry......................... 60
     moe........................... 1000

これは予想される動作ですか?

私が行方不明になっているruby-fooは何ですか?

私が他の言語でnil考えるのに慣れているのと同じ「価値のない」ものではないようです。null

4

5 に答える 5

65

パラメータが指定されていない場合は、デフォルトのパラメータが使用されます。

として提供するとnil、になりますnil。そうです、これは予想される動作です。

于 2012-05-08T20:39:15.227 に答える
42

nilが渡されてもデフォルト値を設定し、引数なしでメソッドの呼び出しを許可する場合は、デフォルト値をnilに設定し、「または等しい」演算子を使用する必要があります。

def foo(bar=nil)
  bar ||= "default value"
  puts bar
end
于 2014-04-28T14:30:05.697 に答える
1

*そのメソッドを呼び出すときに、Rubyのsplat演算子()を使用することもできます。

dudes.each do |k,v|    
  puts format_args(k,*v)
end

出力:

     larry......................... 60
     moe........................... 1000
于 2019-10-15T01:30:42.873 に答える
0

Rubyでは、メソッドは常に何かを返します。場合によっては、返すものが何もないことがあります(データベースのクエリが空になるなど)。nilそれらの場合のためです; 「ここには何もない」のような意味ですが、オブジェクトへの参照です。必要な動作を得るには、パラメーターを渡さないでください。

def talk(msg="Hello")
  puts msg
end

talk #=> "Hello"
于 2012-05-08T20:49:06.377 に答える
0

v.is_nil?ifステートメントで...を試してください。

于 2013-09-28T11:20:03.567 に答える