在Ruby下使用string.scan时出现NoMethodError

时间:2013-05-24 00:40:07

标签: ruby twitter

我正在用Ruby编写一个小脚本,它会发布Twitter帖子并进一步分解它们。当我发送一个正常的字符串(非twitter)时,它工作正常并分割大于32个字符的字符串。但由于某些原因,我在使用Twitter数据时会收到类似的错误:

  

chunk': private method scan'中调用[“twituser:foo。#yolo”]:数组(NoMethodError)

require 'rubygems'
require 'twitter'


Twitter.configure do |config|
  config.consumer_key       = ''
  config.consumer_secret    = ''
  config.oauth_token        = ''
  config.oauth_token_secret = ''
  #config.auth_method        = :oauth
end

def chunk(string,size)
        string.scan(/.{1,#{size}}/)
end

twitterfeed = Twitter.search("#yolo", :count => 1, :result_type => "recent").results.map do |status|
        "#{status.from_user}: #{status.text}"
end

twitterfeed.join
puts "#{twitterfeed}\n"

sendchunks = chunk(twitterfeed,32)
sendchunks.each do |string|
        puts "\x52\x31\x10\xAC\x4E\x31\x31\x32\x33\x34\x35\x36\x35\x41\x0E" + string + "\x0D\x0A"
        puts "#{string}\n"
        sleep(10)
end
puts "done\n"

那为什么会有区别?我是ruby的新手,所以我试图了解变量类型的工作原理。一个普通的字符串可以正常工作,但即使在数组到字符串之间进行转换也是如此。

谢谢!

[编辑完整的脚本代码,因为答案正在逐渐消失,导致事情爆发]

解决方案是执行以下操作:

twitterfeed_string = twitterfeed.join
puts "#{twitterfeed_string}\n"
sendchunks = chunk(twitterfeed_string,32)

1 个答案:

答案 0 :(得分:2)

错误说private methodscan' called for #Array。这是因为您没有将twitterfeed.join('').to_s的结果存储在任何地方。然后,您将twitterfeed数组作为数组传递到chunk方法 您没有覆盖twitterfeed

您可能想要

twitterfeed_as_string = twitterfeed.join
sendchunks = chunk(twitterfeed_as_string , 32)