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!