From: Brian Candler Date: 2007-04-14T04:01:50+09:00 Subject: Re: conditional statements within test method parameters? On Sat, Apr 14, 2007 at 12:20:06AM +0900, Reuben Grinberg wrote: > >I have a test method that writes some xml. The second parameter is > >optional, the first parameter is boolean. > > > > > >test_results((assert(REMEMBER_ME.isSet?)), *msg) > > > > > >Would it be possible to embed a conditional statement between these > >parameters > > > >Something like: > > > > > >test_results((assert(REMEMBER_ME.isSet?)), unless 'the object is not > >set') ? > > > > > >cheers > > > >aidy > > > > Yes, but it's not necessarily pretty: > > def test(one, *two) > puts one > two.each { |t| puts t} > end > > irb> test("bob", "jack", "andy") > bob > jack > andy > irb> test("bob") > bob > irb> some_condition = false > irb> test("bob", some_condition ? ["jack", "andy"] : []) > bob > irb> > > The "optional" argument is actually a list, so passing in the empty list > for it is the same thing as not passing it in. I think you missed a '*' on the method call there. As you've written it, in each case you're passing exactly two arguments, the second of which is either ["jack","andy"] or [], so the array 'two' will consist of either [["jack","andy"]] or [[]] def test(one, *two) puts one.inspect, two.inspect puts end test("bob","jack","andy") test("bob") [false,true].each do |some_condition| test("bob", some_condition ? ["jack", "andy"] : []) end # This is what it should have been [false,true].each do |some_condition| test("bob", *(some_condition ? ["jack", "andy"] : [])) end