如何用Ruby的all?方法正确校验Liquid模板变量的开头括号格式?
问题分析与解决方案
原方法的问题在于:当模板中不包含某个变量时,next会让该次循环的block返回nil,而all?方法要求所有元素的block返回值为true才会最终返回true,nil会被Ruby视为false,导致整个校验方法错误地返回false。
修正后的方法代码
def validate_opening_brackets?(template) variables = %w(user_name company_name company_phone_number) variables.all? do |variable| # 变量不存在于模板中,直接视为合法 next true unless template.include?(variable) # 变量存在时,检查是否有正确的{{开头 template.include?("{{#{variable}") end end
逻辑说明
- 遍历所有需要校验的变量,对于每个变量:
- 如果模板里不包含该变量,直接返回
true,不影响整体校验结果 - 如果模板里包含该变量,则严格检查是否存在
{{变量名的正确前缀,确保变量有合法的Liquid开头标记
- 如果模板里不包含该变量,直接返回
这样all?方法会正确判断:只有当所有出现在模板中的变量都带有正确的{{开头时,才返回true;未出现的变量不会干扰校验结果,符合需求。
内容的提问来源于stack exchange,提问作者slime_saw
相关产品推荐
相关产品推荐

