Sinatra 中通配符和命名路由之间的区别

Difference between a wildcard and a named route in Sinatra

我一直在看关于 Sinatra 的几个教程,但找不到两者之间的区别,比如:

get "/hey/*/there/*"

对比

get "/hey/:first/there/:second"

我看到的唯一区别是访问参数的方式。因此,在第一种方式中,您可以通过以下方式访问它:

params[:splat][0]
params[:splat[1]

而第二种方式:

params[:first]
params[:second]

Sinatra 中的命名参数是否只是我们为其命名的通配符?这是唯一的区别吗?

它们并不完全相同。如果您想匹配不确定数量的参数,而不是单个(命名的)参数,Splats 会很有用。例如:

# Will match: "/hey/:first/there/:second"
# Will match: "/hey/*/there/*"
GET /hey/first/there/second

# Won't match: "/hey/:first/there/:second"
# Will match: "/hey/*/there/*"
GET /hey/first/second/there/third/fourth