我的纸牌游戏(使用Squib构建)基于CSV文件。在这个文件中,我有一个名为main
的列。
以下是该列的内容......如您所见,很多nil
:
print data['main']
> [3, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 0, 0, nil, nil, 0, nil, nil, nil, 0, nil, nil, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1, nil, nil, nil, nil, nil, -1, nil, nil, nil, nil, 0, 0, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
所需行为
对于每张卡片(行):
nil
),我想跳过文本和svg alltogether 我尝试了什么
1 - 我尝试了以下操作,但data['sprint']
是array
而不是value
,因此==
不起作用:
data = Squib.csv file: 'data.csv'
[...]
if data['Sprint'] != nil
text str: data['Sprint3'], layout: 'sprint3'
svg layout: 'block', file: 'svg\left_block.svg'
end
2 - 所以我尝试使用each
方法迭代数组,但这当然会导致在每张卡上显示数组的每个元素:
data['Main'].each do |n|
if n != nil
text str: n, layout: 'main'
svg layout: 'block', file: 'svg\up_block.svg'
end
end
我的Ruby知识就在这里。我不知道仅当main
列中的值不是nil
时才显示一个元素。任何的想法?谢谢!
答案 0 :(得分:2)
Squib的svg以你想要的方式工作 - 如果它为文件获取nil它将不会做任何事情。所以在您的布局文件中只需输入:
block:
file: 'svg\up_block.svg'
然后svg调用没有那个“文件”选项(无论如何都为所有卡设置它)
当布局为nil时,它将默认为svg方法的“文件”,即nil,它什么都不做 - 这就是你想要的。那么你的数据字段可能是['block',nil,nil,nil],只会显示在第一张卡片上。
查看我就该主题撰写的一些新文章: http://squib.readthedocs.org/en/latest/arrays.html http://squib.readthedocs.org/en/latest/guides/getting-started/part_2_iconography.html
(当然正在进行中)
此外,这些也很有帮助:https://github.com/andymeneely/squib/blob/master/samples/ranges.rb
if语句让我想起nanDeck会怎么做 - 与Squib的工作方式不同。你可以用“每个”或“选择”来做,但这比它需要的更复杂。
(完全披露:我是Squib的开发者)