Ruby调用方法报ArgumentError wrong number of arguments错误如何解决
错误触发原因
- Ruby语法规定方法调用时,方法名和参数括号之间不能加空格。你写的
visualization (name = 'Mary', age = 5, looks = 'bad')中,visualization和后面的括号之间多了空格,Ruby会把括号内的所有内容判定为单个表达式处理。 - 括号内的
name = 'Mary', age = 5, looks = 'bad'属于并行赋值表达式,最终返回值是最后一个赋值的'bad',相当于你只给方法传入了1个参数,和方法定义要求的3个参数不匹配,因此抛出ArgumentError。 - 额外需要注意:你原代码中的
age.to_s是无效操作,没有赋值给任何变量,后续字符串拼接时age还是Integer类型,直接和字符串拼接会触发TypeError,也需要同步修正。
修复方案
方案1:删除方法名和参数括号之间的空格
删掉visualization和参数括号的空格即可,同时修正字符串拼接的类型问题:
def visualization(name, age, looks) puts name + ' is ' + age.to_s + ' years old and looks ' + looks end # 直接传参即可,参数位置的赋值属于多余操作 visualization('Mary', 5, 'bad')
方案2:调用方法时省略括号(符合Ruby通用编码风格)
Ruby中方法调用无歧义时可以省略参数括号,搭配字符串插值写法更简洁,不需要手动做类型转换:
def visualization(name, age, looks) puts "#{name} is #{age} years old and looks #{looks}" end visualization 'Mary', 5, 'bad'
内容的提问来源于stack exchange,提问作者user15760659
相关产品推荐
相关产品推荐

