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

Ruby中divmod方法调用结果与预期不符的原因咨询

问题分析与解决

错误原因

  1. 方法绑定方向完全搞反
    4.method(:divmod)生成的是绑定在整数4上的divmod方法对象,通过&转为Proc传入map后,map会把数组a的每个元素作为参数传给这个方法,实际执行的是4.divmod(元素),而非你预期的元素.divmod(4)——这就是结果里商和余数顺序颠倒的核心原因。

  2. 数组追加方式错误
    b << a.map(...)会把map返回的整个数组作为单个元素塞进b,导致最终b是嵌套数组[[...]],而非直接包含所有divmod结果的数组。

正确实现(满足&语法要求)

要实现元素.divmod(4)的逻辑,同时符合&语法要求,推荐简洁的lambda转Proc方式:

a = [7, 1, 65, 4, 13, 97]
b = []

# 用lambda转成Proc,满足&语法要求
b.concat(a.map(&->(num) { num.divmod(4) }))

如果不需要保留初始空数组b,直接赋值更简单:

b = a.map(&->(num) { num.divmod(4) })

执行后b会得到预期结果:

[[1, 3], [0, 1], [16, 1], [1, 0], [3, 1], [24, 1]]

补充说明

如果坚持用方法对象思路,也可以通过反转参数绑定实现,但可读性较差:

b = a.map(&Integer.instance_method(:divmod).curry[4].to_proc.reverse)

实际开发中优先选择lambda的实现方式更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:10:17