comics = load_comics( '/comics.txt' )
Popup.make do
h1 "Comics on the Web"
list do
comics.each do |name, url|
link name, url
end
end
end
我是红宝石的新手。这是来自ruby网站的一段代码。
我无法在菜单中找到'link'和'list'关键字。 有人可以解释一下这两个关键字,这两个关键字的定义在哪里。
我也对他们如何读取变量名称和url感到困惑,他们是通过同一行的空间读取它还是什么? 所以,如果我有 漫画1 link_of_comics_site_1 漫画2 link_of_comics_site_2 漫画3 link_of_comics_site_3
所以对于第一次迭代,name = Comics1,url = link_of_comics_site_1
感谢。
答案 0 :(得分:2)
那不仅仅是Ruby。这是使用ruby附加方法生成HTML的网页模板。
但是可能,调用load_comics
的结果是Hash,其中键是名称,值是URL。你可以自己制作一个:
my_comics_hash = { "name1" => "url1", "name2" => "url2" }
然后你可以用同样的方式迭代:
my_comics_hash.each do |name, url|
puts "Name #{name} goes with URL #{url}"
end
在你的代码中,它在弹出窗口中构建一个HTML列表,但它的想法是一样的。 each
方法对集合进行迭代 - 在本例中为哈希 - 并在该集合中的每个项目上运行一些代码 - 在这种情况下,每个键/值对。当您致电each
时,您会在do
... end
内传递一段代码;这是在每个项目上运行的代码。当前项目被传递给代码块,代码块声明一个变量,将其保存在单词do
之后的管道内。由于我们迭代键/值对,我们可以声明两个变量,键在第一个中,而值在第二个中。
答案 1 :(得分:1)
在ruby函数中,括号是可选的,而“;”语句结束也是可选的。 EJ
link "click here" , "http://myweb.com"
相当于:
link("click here", "http://myweb.com");
但是如果你在一行中有多个语句“;”是必须的,ej
link("click here1", "http://myweb.com"); link("click here2", "http://myweb.com");
在您的代码中,它可以用
编写 link(name, url)
或只是
link(name, url);
或
link name, url
但强烈建议在功能参数周围添加括号以提高可读性,除非您有其他原因。 “;”在红宝石世界中并不常见。