如何在take_while方法的块逻辑中将字面量替换为变量?
失效原因
你当前写法无法运行,本质是误用了字符串插值专用的#{}类语法:
这类语法的作用是将变量值嵌入双引号包裹的字符串、正则表达式、动态符号等文本场景中,它本身不是普通代码逻辑里的变量引用方式。你现在写的是take_while方法块内的条件判断表达式,完全不属于文本插值的上下文,哪怕补全成常见的#{n}写法,也会被Ruby解析为无效语法,无法正确读取变量值。
正确实现方式
Ruby的方法块天然可以访问外层作用域定义的局部变量,不需要做任何特殊处理,直接将原硬编码的字面量13替换为自定义变量n即可,完整示例代码:
enu = [10, 12, 11, 15] n = 13 # 正确的判断逻辑 enu.take_while { |obj| obj <= n } # 方法最终返回结果:[10, 12, 11]
内容的提问来源于stack exchange,提问作者Antonin GAVREL
相关产品推荐
相关产品推荐

