3

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

ソース

4

2 に答える 2

4
def /(p);

メソッド名は' / 'で、パラメータ' p 'を受け取ります

p[0] == ?/

文字列が「 / 」で始まるかどうかを確認します。疑問符は、文字が文字通り使用されていることを指定するために使用されます。'/'と同じと見なすこともできます

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

2番目の疑問符は条件付き評価用です。式(p [0] ==?/)が真の場合はexp1を評価し、そうでない場合はexp2を評価します。

したがって、上記の場合、文字列パラメータが「/」で始まる場合は、値@root + pを返します。つまり、ルートを前に付けます。一方、パラメータが「/」で始まらない場合は、そのように返します。

于 2011-12-12T07:17:53.110 に答える
0

これを書く別の方法は次のとおりです。

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

p[0]文字列の最初の文字を返します。?/文字を返します/。1.8では文字は整数(?/ == 47)で表されますが、1.9では1文字の文字列(?/ == "/")であることに注意してください。それにもかかわらず、p[0]常にと一致し?/ます。

したがって、より高いレベルでは、文字列の最初の文字がスラッシュであるかどうかをチェックし、スラッシュである場合は、その前に@root(Camping :: Base#initializeで設定されている)を追加します。

したがって、アプリケーションが/ blogにマウントされている場合、@root == "/blog"およびself / "/post/1" == "/blog/post/1"

于 2011-12-12T09:19:23.360 に答える