You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中end_with?判断成立时如何返回匹配的后缀字符串值

实现方案

Ruby 原生的 String#end_with? 只会返回 true/false 布尔值,要实现匹配成功时返回命中后缀、失败返回假值的效果,两种写法足够用:

无侵入直接写法

不用改原生方法,业务代码里随用随写,性能和原生调用一致:

# 多后缀匹配场景
file_name = "some_pdf"
permitted_file_types = %w(image pdf)

file_type = permitted_file_types.find { |ext| file_name.end_with?(ext) }
puts file_type
# >> "pdf"
# 单后缀匹配场景
s = "my_name"
name = ["name"].find { |suffix| s.end_with?(suffix) }
puts name
# >> "name"

匹配失败时会返回nil,属于假值,原来写的条件判断逻辑完全不受影响。

复用扩展写法

如果这个逻辑用得频繁,用 Ruby 的 Refinements 安全扩展 String 类就行,别直接全局改原生方法,容易坑到第三方依赖:

module EndWithMatchedSuffix
  refine String do
    def end_with?(*suffixes)
      suffixes.find { |suf| super(suf) }
    end
  end
end

# 需要用的作用域里引入即可
using EndWithMatchedSuffix

# 完全符合预期的调用方式
s = "my_name"
name = s.end_with?("name")
puts name
# >> "name"

file_name = "some_pdf"
file_type = file_name.end_with?(*%w(image pdf))
puts file_type
# >> "pdf"

# 未匹配返回nil,和原方法返回false的条件判断表现完全一致
puts "test_file".end_with?("exe", "dll")
# >> nil

内容的提问来源于stack exchange,提问作者Ryan Roberts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:57:27