【问题标题】:Camping's path building methodCamping的路径搭建方法
【发布时间】:2011-12-12 07:00:35
【问题描述】:

谁能帮我解释一下来自 Lucky Stiff 的 Camping 微框架的这部分代码:

# 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

【问题讨论】:

    标签: ruby syntax camping


    【解决方案1】:
    def /(p);
    

    方法名是'/',它接收参数'p'

    p[0] == ?/
    

    检查字符串是否以 '/' 开头。问号用于指定字符是按字面意思使用的。你也可以认为它和'/'一样

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

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

    因此在上述情况下,如果字符串参数以 '/' 开头,则返回值 @root + p,即在其前面加上 root。另一方面,如果参数不以 '/' 开头,则将其原样返回。

    【讨论】:

    • 感谢您的解释。问号运算符让我很困惑。
    【解决方案2】:

    这是另一种写法:

    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"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 2010-10-30
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多