gpt4 book ai didi

ruby - Sinatra 示例中的自定义路由匹配器如何工作?

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:09 24 4
gpt4 key购买 nike

Sinatra README , 有一个名为 Custom Route Matchers 的部分使用以下示例:

class AllButPattern
Match = Struct.new(:captures)

def initialize(except)
@except = except
@captures = Match.new([])
end

def match(str)
@captures unless @except === str
end
end

def all_but(pattern)
AllButPattern.new(pattern)
end

get all_but("/index") do
# ...
end

谁能帮我解释一下这是如何工作的?我不确定的一点是为什么该示例具有 Match 结构以及什么是 captures。用户不能设置@captures实例变量,只能设置@except;那么captures是如何使用的呢?

最佳答案

When a route is processed, it takes the argument to get (or post or whatever), and sends to that object's match method with the path as an argument .它期望返回 nil ,这意味着它不匹配,或者返回一个捕获数组。该对象通常是一个字符串或一个正则表达式,它们都有一个 match 方法。

Sinatra also calls on the captures method of the object when it is processing a route .该示例使用一个结构作为一种简单的方法来设置和响应一个对象,该对象本身将响应 captures,并放入一个数组,因为这就是 captures 通常会做的返回。它是空的,因为还没有检查字符串是否被捕获,它实际上是一个负过滤器。因此,我更喜欢 the use of a before filter做这样的事情,但总是很难找到清晰有用的例子。

关于ruby - Sinatra 示例中的自定义路由匹配器如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18208094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com