我目前有一段代码如下:
if match = request.path.match(/\A\/(?<slug>(?!admin|assets)\w+)/)
match[:slug]
end
有没有办法使用安全导航操作符(在2.3.0中引入)来避免这种if
条件?
答案 0 :(得分:19)
只需使用普通(非糖)形式。
request.path.match(/\A\/(?<slug>(?!admin|assets)\w+)/)&.[](:slug)
答案 1 :(得分:7)
为了更好的可读性,我会选择#dig
而不是#[]
。
像,
request.path.match(/\A\/(?<slug>(?!admin|assets)\w+)/)&.dig(:slug)
而不是
request.path.match(/\A\/(?<slug>(?!admin|assets)\w+)/)&.[](:slug)
答案 2 :(得分:3)
出于可读性考虑,我更喜欢使用红宝石1.9.1中提供的匹配项named_captures方法和红宝石2.3.0中提供的safe operator方法。
request.path.match(/\A\/(?<slug>(?!admin|assets)\w+)/)&.named_captures&.dig('slug')
答案 3 :(得分:2)
你可以send
任何方法,所以使用安全浏览操作符,这将是:
request.path.match(/\A\/(?<slug>(?!admin|assets)\w+)/)&.send(:[], :slug)