-2

Ruby を使用して、Twitter の投稿を取得し、さらに分割する小さなスクリプトを作成しています。それに対して通常の文字列(Twitter以外)を送信すると、正常に機能し、32文字を超える文字列を分割します。しかし、何らかの理由で、Twitter データを使用すると、次のようなエラーが発生します。

chunk': private method["twituser: foo. #yolo"]:Array (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)
4

1 に答える 1

2

エラーは言うprivate methodscan' called for #Array。これは、twitterfeed.join('').to_sどこにも結果を保存していないためです。twitterfeed次に、配列としてメソッドに渡しますchunk
あなたはオーバーライドしていませんtwitterfeed

あなたはおそらくやりたい

twitterfeed_as_string = twitterfeed.join
sendchunks = chunk(twitterfeed_as_string , 32)
于 2013-05-24T00:43:27.003 に答える