露营的路径建设方法

时间:2011-12-12 07:00:36

标签: ruby syntax camping

有人可以向我解释一下Lucky Stiff的露营微框架中的这部分代码:

# Simply builds a complete path from a path +p+ within the app.  If your
# application is mounted at <tt>/blog</tt>:
#
#   self / "/view/1"    #=> "/blog/view/1"
#   self / "styles.css" #=> "styles.css"
#   self / R(Edit, 1)   #=> "/blog/edit/1"
#
def /(p); p[0] == ?/ ? @root + p : p end

Source

2 个答案:

答案 0 :(得分:4)

def /(p);

方法名称为“ / ”,其接收参数“ p

p[0] == ?/

检查字符串是否以“ / ”开头。问号用于指定字符正在逐字使用。您也可以将其视为'/'

p[0] == ?/ ? exp1:exp2

第二个问号是条件评估。如果表达式(p [0] ==?/)为真,则计算exp1,否则计算exp2。

所以在上面的例子中,如果字符串参数以'/'开头,那么返回值@root + p,它以root为前缀。另一方面,如果参数不以'/'开头,则将其返回。

答案 1 :(得分:0)

这是另一种写作方式:

def /(p)
  if p[0] == ?/
    @root + p
  else
    p
  end
end

p[0]返回字符串中的第一个字符。 ?/会返回/个字符。请注意,在1.8中,一个字符由整数(?/ == 47)表示,而在1.9中,它是一个单字符的字符串(?/ == "/")。尽管如此,p[0]始终与?/保持一致。

所以在更高级别,它会检查字符串中的第一个字符是否为斜杠,如果是,它会将@root(在Camping :: Base#initialize中设置)添加到它。

因此,如果您的应用程序已安装在/ blog,@root == "/blog"self / "/post/1" == "/blog/post/1"