我是Ruby和编程的新手。我试图从Twitch中提取前20个流光,我可以做到这一点,然后我将信息格式化为我自己的哈希数组,控制台输出看起来很好,但我不能将哈希数组分配给一个变量,然后使用。
所以这个
def get_top
top_twitch=twitch_id.get_streams({language: "en"}).data
@top20 = top_twitch.each_with_index.map do |s, idx|
{ "rank#{idx+1}": { game_name: s.game_name,
title: s.title,
game_id: s.game_id,
thumbnail: s.thumbnail_url,
user_name: s.user_name,
viewer_count: s.viewer_count } }
end
输出此
3.1.2 :085 > helper.get_top
=>
[{:rank1=>
{:game_name=>"Rocket League",
:title=>"First Touch Pre-Show | RLCS Winter Major | Group Stage",
:game_id=>"30921",
:thumbnail=>"https://static-cdn.jtvnw.net/previews-ttv/live_user_rocketleague-{width}x{height}.jpg",
:user_name=>"RocketLeague",
:viewer_count=>35257}},
{:rank2=>
{:game_name=>"Counter-Strike: Global Offensive",
:title=>"BLAST.tv Major Europe RMR: B Stream, Day 2 - B8 vs Fnatic",
:game_id=>"32399",
:thumbnail=>"https://static-cdn.jtvnw.net/previews-ttv/live_user_blast-{width}x{height}.jpg",
:user_name=>"BLAST",
:viewer_count=>34514}},
但是当我尝试访问数组时,它不在那里
3.1.2 :086 > top20
(irb):86:in `<main>': undefined local variable or method `top20' for main:Object (NameError)
top20
^^^^^
3.1.2 :087 > @top20
=> nil
module TwitchHelper
attr_accessor :top20
def twitch_id
client_id = 'xxxxxxxxxxxxxxxxxx'
client_secret = 'xxxxxxxxxxxxxxxxxxxx'
access_token = 'xxxxxxxxxxxxxxxxxxxxxxxxx'
twitch_auth = Twitch::Client.new(
client_id: client_id,
client_secret: client_secret,
access_token: access_token
)
end
def get_top
top_twitch=twitch_id.get_streams({language: "en"}).data
@top20 = top_twitch.each_with_index.map do |s, idx|
{ "rank#{idx+1}": { game_name: s.game_name,
title: s.title,
game_id: s.game_id,
thumbnail: s.thumbnail_url,
user_name: s.user_name,
viewer_count: s.viewer_count } }
end
end
end
1条答案
按热度按时间bbmckpt71#
您的问题是您没有将示例变量
@top20
与您定义的类的特定示例相关联。假设变量
helper
包含一个类示例(helper = ClassName.new(...)
)。如果您已经为
@top20
创建了getter方法,则需要编写可以通过包含示例方法来创建getter
因为getter是经常需要的,Ruby提供了一个创建这个方法的快捷方式,通过包含
这将调用类上的Module#attr_reader方法(当创建类时),该方法将创建上述getter方法。
或者,可以使用Module#attr_accessor创建getter和setter方法,方法是包含以下行
setter方法等价于
并被调用
其中
x
是要分配给@top20
的对象的占位符。如果还没有为
@top20
创建getter方法,则需要编写或
参见Object#instance_variable_get。