3

デフォルト値を持つ引数を持つメソッドがあります。値がユーザーからのものか、デフォルト値かを知る必要があります。ユーザーはデフォルト値も送信できます。値がどこから来ているかを知るにはどうすればよいですか?

4

2 に答える 2

12

2004年に中田信が提案したトリックを使用できます。

def some_method( a=(implicit_value=true; 1) )
    puts "a=#{a}; was set #{ implicit_value ? :im : :ex }plicitly"
end

> some_method
a=1; was set implicitly

> some_method 1
a=1; was set explicitly

> some_method 2
a=2; was set explicitly
于 2012-10-22T19:21:29.980 に答える
4

これも機能し、見栄えが少し悪くなります。

def my_method(a = implicit = 1)
  p a
  p implicit
end

# when calling without parameters then a = implicit = 1 is run, hence implicit is assigned a value 
> my_method
1
1

# when calling with a parameter then a = 1 statement is run. implicit will become nil here
> my_method 1 
1
nil
于 2012-10-22T20:10:38.657 に答える