0
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​​ 网站的一段代码。

我在菜单中找不到什么“链接”和“列表”关键字。谁能解释一下这两个关键字,这两个关键字的定义在哪里。

我也对他们如何读取变量名称和 url 感到困惑,他们是通过同一行的空格读取它还是什么?所以如果我有 Comics1 link_of_comics_site_1 Comics2 link_of_comics_site_2 Comics3 link_of_comics_site_3

所以对于第一次迭代,name=Comics1 和 url =link_of_comics_site_1

谢谢。

4

2 回答 2

2

这不仅仅是鲁比。这是使用 ruby​​ 附加方法生成 HTML 的网页模板。

但据推测,调用的结果load_comics是一个哈希,其中键是名称,值是 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。由于我们正在迭代键/值对,我们可以声明两个变量,键在第一个中,值在第二个中。

于 2012-05-19T06:08:03.037 回答
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

但强烈建议在函数参数周围加上括号以提高可读性,除非您有其他原因。这 ”;” 在红宝石世界并不常见。

于 2012-05-19T06:18:04.847 回答