编辑:要清楚,我正在尝试使用此kind of generator(即使用'yield'语句)而不是Rails生成器。
我在Rails项目中有以下(简化的)初始化程序mixin,我可以使用一些帮助。我想要做的是创建一个生成器来跟踪Twitter API调用(这只是用于调试,我知道有关rate_limit_status)。
require 'generator'
# Be sure to restart your server when you modify this file.
module TwitterMixin
def get_auth
@auth ||= Twitter::HTTPAuth.new(ENV['TWITTER_USER'], ENV['TWITTER_PASS'])
end
def count
@counter ||= generator.new
@counter.yield
end
def client
p "#{count} Twitter API calls this iteration"
@client ||= Twitter::Base.new(get_auth)
end
end
问题是我收到以下错误:
dlopen(/Users/john/.gem/ruby/1.8/gems/json-1.2.0/ext/json/ext/generator.bundle, 9): no suitable image found. Did find:
/Users/john/.gem/ruby/1.8/gems/json-1.2.0/ext/json/ext/generator.bundle: mach-o, but wrong architecture - /Users/john/.gem/ruby/1.8/gems/json-1.2.0/ext/json/ext/generator.bundle
这似乎与json生成器发生冲突,这可能是一个更封闭的范围。 主要问题是如何确保调用Ruby标准库类(特别是生成器类)?
我还是Ruby,BTW的新手,并且在Rails :: Generator中搜索“Rails中的生成器”非常占主导地位,所以这可能相当明显。此外,我对这个问题有更优雅的解决方案,我可能已经错过了。感谢。
答案 0 :(得分:1)
你的系统上有一个名为“generator”的ruby gem吗?听起来像红宝石根据您的要求定位宝石有困难。如果你正在使用Rubigen生成器,那么你需要:
require 'rubigen'
等等。试试跑:
gem list generator
如果它没有提起任何东西,你可能用错误的名字调用了库。
答案 1 :(得分:0)
您不必构建生成器,您可以直接使用yield方法,这是我没有意识到的。这段代码有效。
# Be sure to restart your server when you modify this file.
module TwitterMixin
def get_auth
@auth ||= Twitter::HTTPAuth.new(ENV['TWITTER_USER'], ENV['TWITTER_PASS'])
end
def count
@num ||= 0
while true
num += 1
yield num
end
end
def client
p "#{count} Twitter API calls this iteration"
@client ||= Twitter::Base.new(get_auth)
end
end
答案 2 :(得分:0)
让我拒绝我之前的回答,并说使用“yield”认为它是一个内置类似于Python的yield语句的生成器,这对我来说是相当愚蠢的。我今天在第一次关于Ruby块的RubyGorge会议上了解到了这一点。因此,我认为我仍然在寻求解决这个问题的方法。