Ruby 2.7.0文档标注String类'/'方法存在但实际无法调用问题咨询
Ruby 2.7.0 String#/ 方法相关问题说明
方法查询逻辑的常见误区
首先要明确Ruby的方法查询规则:
- 类似
str/','、3/2的调用,触发的是对应类的实例方法,调用主体是类生成的实例对象,不是类本身。 类名.methods接口查询的是类对象自身持有的类方法、单例方法,默认不会包含实例方法。不止是/方法,用这个接口查询:split、:+这类通用实例方法,同样会返回nil。- 实例方法的正确查询写法为
类名.instance_methods.include?(:方法名),可以用Integer类做验证:执行Integer.instance_methods.include?(:/)会返回true,对应3./(2)可正常返回计算结果1,符合预期。
String#/方法的实际实现情况
- 原生MRI 2.7.0核心代码中确实没有实现
String#/实例方法,运行时抛出的方法不存在报错不属于环境配置问题。 - 文档出现该方法条目属于历史遗留错误:
/作为split的别名是Ruby 1.8及更早版本中存在的语法糖,1.9版本重构核心类时就已经从核心代码中移除了这个别名,但文档生成流程没有同步清理对应条目,最终导致文档描述和实际实现不一致。 - 如果需要使用这个简写语法,手动给String类添加别名即可,参考代码如下:
class String alias / split end
添加别名后执行"a,b,c"/',',就能得到和split(',')完全一致的字符串分割结果。
内容的提问来源于stack exchange,提问作者David Ljung Madison Stellar
相关产品推荐
相关产品推荐

