Question

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

I am new to ruby. This is a piece of code from a ruby website.

I cant find what 'link' and 'list' keyword in the menu. can someone explain it a little bit those two keywords, and where is the definition of those two keyword .

I am also confused on how they read the variables name and url, they are reading it by the space at the same line or what? so if I have Comics1 link_of_comics_site_1 Comics2 link_of_comics_site_2 Comics3 link_of_comics_site_3

so for the first iteration, name=Comics1, and url =link_of_comics_site_1

Thanks.

Was it helpful?

Solution

That's not just Ruby. That's a template for a webpage using ruby add-on methods for HTML generation.

But presumably, the result of the call to load_comics is a Hash, where the keys are names and the values are URLs. You could make one of those yourself:

my_comics_hash = { "name1" => "url1", "name2" => "url2" }

which you can then iterate over the same way:

my_comics_hash.each do |name, url|
  puts "Name #{name} goes with URL #{url}"
end

In your code, it's building up an HTML list inside a popup window, but it's the same idea. The each method iterates over a collection - in this case a Hash - and runs some code on every item in that collection - in this case, each key/value pair. When you call each, you pass it a block of code inside do ... end; that's the code that gets run on each item. The current item is passed to the code block, which declares a variable to hold it inside the pipes right after the word do. Since we're iterating over key/value pairs, we can declare two variables, and the key goes in the first and the value in the second.

OTHER TIPS

In ruby function, parenthesis is optional and the ";" end of statement is also optional. ej

link "click here" , "http://myweb.com" 

is equivalent to :

link("click here", "http://myweb.com");

But If you have more than one statement in a line the ";" is a must, ej

  link("click here1", "http://myweb.com"); link("click here2", "http://myweb.com");

In your code it could be written in

 link(name, url)

or just

 link(name, url);

or

 link name, url

But it is highly recommended to put parenthesis around function parameters for readability unless you have other reason . The ";" is not common in ruby world .

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top