Ruby Sinatra可选参数运算符和语法。正确的语法是什么?

Ruby Sinatra可选参数运算符和语法。正确的语法是什么?,ruby,routes,sinatra,Ruby,Routes,Sinatra,请问网址: get '/foo/?bar' "Hi" end 走那条路线??操作员在这里工作吗?或者我需要两个?标记吗?我正在阅读Sinatra并正在运行,它似乎没有列出这一点。这似乎很重要。您可以提供一个普通的正则表达式来匹配路由。例如,一个非常允许的“foo”路由,它接受每个包含单词子字符串“foo”的路由: 这将匹配: /foo /foobar /bar/other\u foo/something\u other 正确的语法是: get /foo/ do 'From ANY pa

请问网址:

get '/foo/?bar'
  "Hi"
end

走那条路线?
操作员在这里工作吗?或者我需要两个
标记吗?我正在阅读Sinatra并正在运行,它似乎没有列出这一点。这似乎很重要。

您可以提供一个普通的正则表达式来匹配路由。例如,一个非常允许的“foo”路由,它接受每个包含单词子字符串“foo”的路由:

这将匹配:

  • /foo
  • /foobar
  • /bar/other\u foo/something\u other
  • 正确的语法是:

    get /foo/ do
      'From ANY path that includes the word foo!'
    end
    
    其中,第一个问号使前面的
    /
    可选,第二个问号使前面的符号
    :bar
    可选,因此:
    /foo/about
    -是
    /foo/about/blog
    -否
    /foo
    -是
    /foo/
    -是

    否则,您只能将
    :bar
    符号设置为可选

    get '/foo/?:bar?' do
      "Hi"
    end
    
    因此:
    /foo/about
    -是
    /foo/about/blog
    -否
    /foo
    -否
    /foo/
    -是

    再举一个例子,此选项:

    get '/foo/:bar?' do
      "Hi"
    end
    
    实际上相当于:

    get '/go/?:bar' do 
        "wow"
    end
    

    注意模式:正则表达式不匹配单词,它匹配子字符串。它会和“foo bar”和“foodie”一模一样。使用
    /\bfoo\b/
    匹配单词。是的,这就是我提供这些示例的原因。是的,您提供了示例,但如果说它找到了一个单词,则会产生误导。它找到了一个子字符串。这两者之间有区别。好吧,但我建议你这么做。不要使用
    标签标记已删除的单词,或在替换词上使用粗体格式。我们可以通过查看修订历史来判断添加了什么,所以只需更改文本即可。另外,我建议重新编写代码的消息。我能做到,但我不会,因为改变人们的代码,特别是在答案中,是不好的形式。好的,谢谢!!我会从下次开始注意,注意礼节。请注意:您的回答对我帮助很大,并激励我更加频繁地阅读。@Jwan622,您没有。更新了我的答案。似乎/foo/about/blog应该是肯定的?@Jwan622,不,应该是否定的。事实上,即使是
    /foo/about/
    在这两种情况下都是否定的(要想让答案是肯定的,你应该使用
    /foo/:bar?/
    )。要使
    /foo/about/blog
    成为yes,您可以使用,例如,
    foo/:bar?/?/:hm?
    。顺便说一句,
    如果您不打算在以后从params散列中使用它,那么它是不必要的。
    get '/go/?:bar' do 
        "wow"
    end
    
    get '/go/:bar' do 
        "wow"
    end