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

时间:2017-03-30 16:47:06

标签: ruby sinatra rack

我一直在看Sinatra上的几个教程,但是找不到区别,比如说:

get "/hey/*/there/*"

VS

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

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

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

而第二种方式:

params[:first]
params[:second]

是Sinatra中的一个命名参数,只是一个我们给它命名的通配符?这是唯一的区别吗?

1 个答案:

答案 0 :(得分:2)

他们不太一样。如果要匹配不确定数量的参数而不是单个(命名)参数,则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