使用class_eval时如何定义[]类方法 实现quaternion gem数组转四元数
错误原因
Ruby中定义[]运算符类方法时,方法名是[],参数需要放在方法名后紧跟的圆括号内,你写的def self.[ary]不符合语法规则。
适配原需求的正确实现(传入数组创建实例)
Quaternion.class_eval do def self.[](ary) Quaternion.new(*ary) end end
调用方式为Quaternion[[1, 2, 3, 4]],传入数组即可生成对应的四元数实例。
优化实现(支持直接传多参数,更易用)
如果希望调用更简洁,不需要显式包裹数组,可以改用可变参数实现:
Quaternion.class_eval do def self.[](*args) Quaternion.new(*args) end end
修改后可以直接通过Quaternion[1, 2, 3, 4]的形式创建实例,更符合常用的运算符调用习惯。
内容的提问来源于stack exchange,提问作者Obromios
相关产品推荐
相关产品推荐

