2

最後の項目として渡すことができるオプションのハッシュを持つ vararg を取る関数があります。

def func(*args)
  options = args.last.is_a?(Hash) ? args.pop : {}
  items = args

end

配列があり、ハッシュも渡したい場合、この関数をどのように呼び出すのですか?

x = [ "one", "two", "three" ]
....                              
func(*x, :on => "yes")            # doesn't work, i get SyntaxError

SyntaxError メッセージは次のとおりです。

syntax error, unexpected tSYMBEG, expecting tAMPER
fun(*x, :on => "yes")

Ruby v1.8.7 を実行しています。

4

1 に答える 1

1

*最初の引数の前に付けずに呼び出します。

def func(*args)
  options = args.last.is_a?(Hash) ? args.pop : {}
  items = args

  puts "Options: On: #{options[:on]}, Off: #{options[:off]}\n" if options.length > 0
  p args
end

func(x, 123, 'a string', {:on => "yes", :off => "no"})

# Prints:
Options: On: yes, Off: no
[["one", "two", "three"], 123, "a string"]
于 2012-09-08T00:26:06.940 に答える