当我将代码移动到函数时,为什么我的Ruby脚本不会运行?

时间:2011-10-08 18:23:38

标签: ruby windows function

我有一个简单的脚本,基本上读取RSS脚本&把它推到推特上。

该脚本工作正常,除非我将它全部移动到函数并调用函数时,它不会执行。为什么会这样?

这是有效的:

require 'rubygems'
require 'simple-rss'
require 'open-uri'
require 'bitly'
require 'twitter'

def setup_bitly()
   puts "Bitly setup"
   bitly_username = "<user-name>"
   bitly_apikey = "R_<api-key>"
   Bitly.use_api_version_3
   bitly = Bitly.new(bitly_username, bitly_apikey)
end 


def setup_twitter()
  Twitter.configure do |config|
    config.consumer_key = "<key>"
    config.consumer_secret = "<secret>"
    config.oauth_token = "<token>"
    config.oauth_token_secret = "<secret>"
    twitter = Twitter::Client.new
  end
end


bitly = setup_bitly()
twitter = setup_twitter()
url = "http://stackoverflow.com/feeds/tag/ruby"

puts 'Fetching and parsing feed: ' + url.to_s
    rss = SimpleRSS.parse open(url)

    rss.items.reverse.each_with_index do |i,idx|
    u = bitly.shorten(i.link, :history => 1)
    twitter_status = "#{i.title}" 
    puts twitter_status
    twitter.update(twitter_status)

    sleep 10

end

这是输出:

C:\Users\Sathya\Documents\code\read-feed>read-feed.rb
Fetching and parsing feed: http://stackoverflow.com/feeds/tag/ruby
Dynamic lists in rails 3
Ruby add dynamic events using AASM

如果我将最后一个块移动到某个函数,它就不会执行。通过“不执行”,我的意思是,Ruby解释器运行&amp;退出,没有(错误)消息,没有。为什么会这样?

这是导致问题的版本:

require 'rubygems'
require 'simple-rss'
require 'open-uri'
require 'bitly'
require 'twitter'

def setup_bitly()
   puts "Bitly setup"
   bitly_username = "<username>"
   bitly_apikey = "<api_key>"
   Bitly.use_api_version_3
   bitly = Bitly.new(bitly_username, bitly_apikey)
end 


def setup_twitter()
  Twitter.configure do |config|
    config.consumer_key = "<key>"
    config.consumer_secret = "<secret>"
    config.oauth_token = "<token>"
    config.oauth_token_secret = "<secret>"
    twitter = Twitter::Client.new
  end
end

def do_work()
  url = "http://stackoverflow.com/feeds/tag/ruby"
  puts 'Fetching and parsing feed: ' + url.to_s
  rss = SimpleRSS.parse open(url)
  rss.items.reverse.each_with_index do |i,idx|
    u = bitly.shorten(i.link, :history => 1)
    twitter_status = "#{i.title}"
    puts twitter_status
    twitter.update(twitter_status)
    sleep 10
end

bitly = setup_bitly()
twitter = setup_twitter()
do_work()

end

如果我运行它,脚本运行&amp;退出:

C:\Users\Sathya\Documents\code\read-feed>read-feed.rb

我在Ruby 1.9.2p290上运行Windows 7 64位

2 个答案:

答案 0 :(得分:3)

这是完全正常的,您的函数看不到变量bitlytwitter

您可以执行以下操作之一:

  • 将它们作为参数传递给您的函数。
  • 将该函数包装在一个类中并使用@instance变量。
  • 使用全局变量(请不要:))

答案 1 :(得分:1)

你确定它安静地运行没有错误吗?代码至少存在2个问题:

  1. 您在twitter.update中调用了do_work,但没有在范围内调用twitter的局部变量。同样适用于bitly

  2. 最后一行还有一个end