Ruby 试图访问块内的变量
我正在尝试制作一个简单的rss生成器。我的initialize方法工作正常,update方法运行时也没有错误,但是update方法中的新项从未添加到rss提要中。我认为这与我如何访问变量“maker”有关,但我不确定Ruby 试图访问块内的变量,ruby,rss,Ruby,Rss,我正在尝试制作一个简单的rss生成器。我的initialize方法工作正常,update方法运行时也没有错误,但是update方法中的新项从未添加到rss提要中。我认为这与我如何访问变量“maker”有关,但我不确定 require "rss" class RSS_Engine def initialize @rss = RSS::Maker.make("atom") do |maker| maker.channel.author = "Jamie" mak
require "rss"
class RSS_Engine
def initialize
@rss = RSS::Maker.make("atom") do |maker|
maker.channel.author = "Jamie"
maker.channel.updated = Time.now.to_s
maker.channel.about = "http://www.ruby-lang.org/en/feeds/news.rss"
maker.channel.title = "Example Feed"
@maker = maker
end
end
def update
@maker.items.new_item do |item|
item.title = "Test"
item.updated = Time.now.to_s
end
end
def print_rss
puts @rss
end
end
rss = RSS_Engine.new
rss.update
rss.print_rss
我从这个示例中获得了原始代码:
rss = RSS::Maker.make("atom") do |maker|
maker.channel.author = "matz"
maker.channel.updated = Time.now.to_s
maker.channel.about = "http://www.ruby-lang.org/en/feeds/news.rss"
maker.channel.title = "Example Feed"
maker.items.new_item do |item|
item.link = "http://www.ruby-lang.org/en/news/2010/12/25/ruby-1-9-2-p136-is-released/"
item.title = "Ruby 1.9.2-p136 is released"
item.updated = Time.now.to_s
end
此代码工作正常,但我希望能够随着时间的推移向rss提要中添加新帖子,因此我尝试将“new.item”位放入它自己的方法中。问题不在于
@maker
变量,您必须调用to_feed
方法在修改完代码块后重新生成提要
因此,您需要将@rss=@maker.to_feed
添加到update
方法的末尾
关于创建新的提要条目、链接或id属性,还有一件事需要设置
以下代码适用于您:
def update
@maker.items.new_item do |item|
item.link = "http://test.com"
item.title = "Test"
item.updated = Time.now.to_s
end
@rss = @maker.to_feed
end
如果您对原因感兴趣,可以看看ruby rss源代码。下面的代码(在rss/maker/base.rb下)是您在块外修改提要时需要调用to_feed
方法的根本原因:
def make(*args, &block)
new(*args).make(&block)
end
def make
yield(self)
to_feed
end
不要在Ruby代码中使用制表器。如果你在更新方法的第一行添加一个
p@maker
,会打印什么?我得到大约100行代码。首先是#我知道这必须是简单的事情。非常感谢。