Functional Equivalency

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.

Hi –

On Wed, 25 Oct 2006, tom.mancino wrote:

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.

David

On 10/25/06, [email protected] [email protected] wrote:

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/

Rick DeNatale wrote:

1000000, false, ‘student’, ‘Broad’)])
map! returns an array – so in the second example, you’ve got an array
@kwd = kwd

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

The point wasn’t that map and map! are different - it’s that the OP
takes the result from map! and puts it inside an array (note the square
brackets):

res = adwords.estimateKeywordList([keywords.map! {|x|
AdWords::KeywordRequest.new(nil, 1000000, false, x, ‘Broad’)} ])

Which makes it an array within an array.

With the first form, it’s a flat array:

res = adwords.estimateKeywordList([AdWords::KeywordRequest.new(nil,
1000000, false, ‘test’, ‘Broad’), AdWords::KeywordRequest.new(nil,
1000000, false, ‘student’, ‘Broad’)])

The difference is probably why the second form is failing.

-Justin

Justin,

I believe you must be correct, as it does produce different results.
Any idea on how you would build a flat array that can take a variable
in this situation?

Rick and David, thanks for any help as well.

Tommy
Ruby N.

Hi –

On Thu, 26 Oct 2006, tom.mancino wrote:

Aren’t these statements functionaly equivilant, or have I missed
class KeywordRequest
puts “With array literal”
rick@frodo:/public/rubyscripts$ ruby kwl.rb

res = adwords.estimateKeywordList([AdWords::KeywordRequest.new(nil, 1000000, false, ‘test’, ‘Broad’), AdWords::KeywordRequest.new(nil, 1000000, false, ‘student’, ‘Broad’)])

The difference is probably why the second form is failing.

-Justin
Justin,

I believe you must be correct, as it does produce different results.
Any idea on how you would build a flat array that can take a variable
in this situation?

I’m not sure what you mean by ‘take a variable’, but try just using
map (or map!) without wrapping it in ann array:

res = adwords.estimateKeywordList(keywords.map! {|x|
AdWords::KeywordRequest.new(nil, 1000000, false, x, ‘Broad’)})

(Note lack of square brackets.)

David

On 10/25/06, Justin C. [email protected] wrote:

res = adwords.estimateKeywordList([AdWords::KeywordRequest.new(nil,
something (probably!)…this may be an api problem as well.
class KeywordRequest
puts “With array literal”

Both forms return a single level array of KeywordRequests.
res = adwords.estimateKeywordList([keywords.map! {|x| AdWords::KeywordRequest.new(nil, 1000000, false, x, ‘Broad’)} ])
Darn, I KNEW it was time to get these glasses checked!

Worked like a champ, thanks. I really like this language!