如何使自定义Ruby类型表现得像字符串?
如果我有一个表示某种字符串类型的自定义
Ruby类,就像在
class MyString end 我应该实现哪些功能才能使以下用例成为可能: >每当需要MyString时传递Ruby字符串 我已经看到了各种有趣的函数,比如to_s,cmp,==和eq,但是当我们调用每个函数时我都不清楚. 我的具体用例是我正在使用C API编写一个Ruby扩展,它公开了接收(并返回)自定义字符串类型(准确地说是 解决方法
至少有三种方法:
> class MyString<串; ...;结束 同时执行#2和#3将使对象非常像真正的String,即使它不是子类. #to_s是一个显式转换器,这意味着它必须出现在Ruby代码中才能工作. #to_str是一个隐式转换器,这意味着Ruby解释器会在需要String时尝试调用它,但是会给出其他内容. 更新: 以下是to_str可以带来的一些乐趣的例子: begin open 1,'r' rescue TypeError => e p e end class Fixnum def to_str; to_s; end end open 1,'r' 运行时,第一次打开失败并出现TypeError,但第二次打开则查找1. #<TypeError: can't convert Fixnum into String> fun.rb:9:in `initialize': No such file or directory - 1 (Errno::ENOENT) from fun.rb:9:in `open' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |