1

私は次のような方法があります

def SomeMethod (*args)
     m = if args.length > 0 then 
            self.method(:method1) 
         else 
            self.method(:method2)
         end
     m.call ... #need to either pipe all arguments aside from the first
                #and in other cases substitute the first argument
end

実際の構造は少し複雑で、呼び出されるメソッドが異なるインスタンスからのものであり、最初の引数を使わないようにすべての引数をパイプする必要がある場合もあれば、最初の引数を別の値に置き換える必要がある場合もあります

4

2 に答える 2

2

いわゆるsplat演算子*を使用して、配列を引数リストに展開 できます。

# Call with all but the first element
m.call *args[1..-1]

# Replace first element
m.call *args[1..-1].unshift(newarg)

このRubyコードで(単項)*演算子は何をしますか?
ハッシュの組み合わせに対する2つの配列での奇妙な乗数演算子の動作

于 2013-01-15T09:04:25.137 に答える
0

ハッシュで試すことができます

def SomeMethod (hash_arg={})
    m = unless hash_arg.blank? then 
            self.method(:method1) 
        else 
            self.method(:method2)
        end
     m.call ... #need to either pipe all arguments aside from the first
            #and in other cases substitute the first argument
#Check if a certain arg has been passed=> do_something unless hash_arg[:certain_arg].nil?
end
于 2013-01-15T10:16:42.677 に答える