Метод строительства дорожки кемпинга - PullRequest
3 голосов
/ 12 декабря 2011

Может ли кто-нибудь объяснить мне эту часть кода из микро-фреймворка Lucky Stiff's 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

Источник

Ответы [ 2 ]

4 голосов
/ 12 декабря 2011
def /(p);

имя метода - ' / ', который получает параметр ' p '

p[0] == ?/

проверить, начинается ли строка с ' / '. Знак вопроса используется, чтобы указать, что символ используется буквально. Вы также можете считать это так же, как '/'

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

Второй знак вопроса предназначен для условной оценки. Если выражение (p [0] ==? /) Истинно, тогда вычислить exp1, иначе вычислить exp2.

Таким образом, в приведенном выше случае, если строковый параметр начинается с '/' , затем возвращается значение @root + p, то есть с добавлением root. С другой стороны, если параметр не начинается с '/' , верните его как таковой.

0 голосов
/ 12 декабря 2011

Вот еще один способ написать это:

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".

...