On 10/25/06, dblack / wobblini.net <dblack / wobblini.net> wrote:
> Hi --
>
> On Wed, 25 Oct 2006, tom.mancino wrote:
>
> > This works for multiple keywords:
> >
> > res = adwords.estimateKeywordList([AdWords::KeywordRequest.new(nil,
> > 1000000, false, 'test', 'Broad'), AdWords::KeywordRequest.new(nil,
> > 1000000, false, 'student', 'Broad')])
> >
> > This doesn't:
> >
> > keywords = ['test','student']
> > res = adwords.estimateKeywordList([keywords.map! {|x|
> > AdWords::KeywordRequest.new(nil, 1000000, false, x, 'Broad')} ])
> >
> > Aren't these statements functionaly equivilant, or have I missed
> > something (probably!).....this may be an api problem as well.
>
> map! returns an array -- so in the second example, you've got an array
> inside an array.

I don't think so. They should be equivalent.  Here's a simplification
of the OPs use case, with a dummy KeywordRequest class and JUST the
expression for the argument:

rick@frodo:/public/rubyscripts$ cat kwl.rb
class KeywordRequest
  def initialize(kwd)
    @kwd = kwd
  end

  def inspect
    "KWR(#{@kwd})"
  end

end

puts "With array literal"
p [KeywordRequest.new('test'), KeywordRequest.new('student')]

keywords = ['test', 'student']
puts "With map"
puts "result=#{keywords.map {|x| KeywordRequest.new(x)}.inspect}"
puts "keywords=#{keywords.inspect}"
puts "with map!"
puts "result=#{keywords.map! {|x| KeywordRequest.new(x)}.inspect}"
puts "keywords=#{keywords.inspect}"


rick@frodo:/public/rubyscripts$ ruby kwl.rb
With array literal
[KWR(test), KWR(student)]
With map
result=[KWR(test), KWR(student)]
keywords=["test", "student"]
with map!
result=[KWR(test), KWR(student)]
keywords=[KWR(test), KWR(student)]

Both forms return a single level array of KeywordRequests.

It is probably better to use :map instead of :map! unless he WANTS to
clobber the array of keywords.


-- 
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/