有人可以向我解释一下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
答案 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"
。