- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在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/
我是一名优秀的程序员,十分优秀!