【问题标题】:Understanding Ruby (Sinatra) - very very basic理解 Ruby (Sinatra) - 非常非常基础
【发布时间】:2012-10-08 17:18:35
【问题描述】:

我在看 Sinatra 并试图理解语法:

require 'sinatra'

get '/' do
  "Hello, World!"
end

我知道它是这样做的:

这是一条“路线”。在这里,我们告诉 Sinatra,如果使用普通的 GET HTTP 方法请求主 URL 或根 URL '/',以显示“Hello, World!”

但是 Ruby 语言发生了什么?

  1. 这个语法是什么意思:get '/'get 是一种方法,而 '/' 是它的参数吗?如果是方法,那么在Ruby中,我可以将方法称为methodname (parameter) {}{ } 是干什么用的?
  2. 我通常将doend理解为{ },它们是对函数体的一种封装。
  3. doend 之间有“Hello, World!”这是一个声明吗?我的意思是,它正在打印,但我们没有将其称为print "Hello, World!",所以这是怎么回事?
  4. 似乎get 是Sinatra 中定义的方法,但如果我添加一个gem,其中已经定义了get 方法,那么我怎么知道它会调用哪个'get' 方法?还是指HTTP get 方法?

如果这个问题听起来很基本,我很抱歉,但我想在继续之前解决它。

【问题讨论】:

    标签: ruby rubygems sinatra


    【解决方案1】:

    我建议在解决像sinatra 这样一个相当专业的库之类的更大问题之前先阅读有关 ruby​​ 的教程。

    一个好的起点是Ruby Koans

    至于你的问题。

    1. get 是一种方法。 '/' 是它的论点。 do ... end 表示 ruby​​ 中的块,就像 {} 一样。
    2. 是的,do ... end 就是这样
    3. Ruby 中的块返回默认计算的最后一个值,因此在这种情况下,字符串与 return "String" 相同。
    4. 如果您遇到命名空间冲突,Ruby 会抱怨。在这种情况下,getsinatra 定义的方法get。抽象地说,它代表对服务器的HTTP GET 请求。

    【讨论】:

    • 谢谢。我已经阅读了这些教程,但是你没有从哪里得到如此精细的语法解释。我相信,随着时间的推移,根据经验,我会很容易地抓住它们。通常在大多数语言中,方法调用看起来像方法名(参数)。但这里是方法名(参数),然后是 {}。这让我迷失了。它调用 get 方法,在其中传递参数“/”并附加一个块,返回“hello world”。那么在定义 get 方法的地方如何使用这个块呢?方法调用只是方法名和参数,不是吗?
    • @JVK,使用 '{' 和 '}' 来定义某些东西的主体在语言中很常见,你只是没有用 C、C++ 或 Perl 编写过,仅举三例,你在哪里' d 看大括号。我们将 '{' 和 '}' 或 'do'/'end' 中的内容称为块。
    • @JVK 块是方法调用的参数之一(总是最后一个)。当方法 yields 时调用它。
    • 谢谢大家。我希望我能早点看到这个解释robertsosinski.com/2008/12/21/…,这正是我在寻找什么。
    【解决方案2】:

    对于“完美”的回应,我建议你看一下“Sinatra Up and Running”一书 Alan Harris 和 Konstantin Haase。

    http://shop.oreilly.com/product/0636920019664.do

    第 6 页和第 7 页解释了“get '/' do”这行实际上是一个方法调用。

    您可以使用 Google 预览查看这 2 个页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-30
      • 2012-09-07
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2013-01-21
      相关资源
      最近更新 更多