Ruby 你认为 Ruby 中最不会有人用的部分是?

john1king · 2012年07月15日 · 最后由 john1king 回复于 2012年07月16日 · 3270 次阅读

这不是在找茬,只是从使用者的角度经常无法理解语言开发者设计一个方法/功能的原因。更重要的是限于每个人自身的水平和领域,对同一个功能的理解也会有所不同。你认为不会人用的方法,说不定确有其妙用。发掘各种奇迹淫巧总是令人欲罢不能,但知道没有人用的理由,尽量使用语言的 good parts,也不失为提升编程能力的一种好方法。

每隔一段时间重新看 api 文档,都会有不错的收获。其中 open 方法的几种模式r+ a+ w+ 一直没搞懂。 r+ 虽然不够实用,但还能找出明显的区别,后两个在我看来和 a w 就是一个模式。很多语言都有提供这几种模式,猜想这些可能继承于 C(我只用过动态语言),大概只有在按字节和行来读写文件时才可能会有一点用处,也没看到过用这些模式的源码,遂不再研究了。

好吧,我刚找到一个 w+ 的一个用法,见 http://ruby-china.org/topics/4241#reply5

open('file', 'w+') do |f|
  text = '如何获取文件的编码'
  f.write text.encode('gbk')
  f.write text.encode('utf-8')
  f.rewind
  puts f.read
end

最开始是打算这样写的

text = '如何获取文件的编码'
File.write('file', text.encode('gbk'))
File.write('file', text.encode('utf-8'), :mode => 'a')
puts File.read('file')

学 ruby 前有 C 语言和*nix 基础可能更好,值得花时间看看

有意思,貌似上次有人发现了 c 的 printf 可以打%5s 之类的。 不知道你在不在 linux 或 mac 下,可以在终端下直接 man fopen 或 man printf 就可以了。

@hhuai 虽然看的不是 man,文档还是读过的。不过在写上面的代码之前一直没有同时读写过同一个文件,所以错把重点放在了“指针在文件开始位置上”这里,奇怪的就认为 + 模式没什么用处了。

这个帖本意就是想发表一些错误的认识,然后得到一些有意的纠正。不过现在看起来,可能多数会比较初级,多半不会有人感兴趣。其实这类问题还有很多,只是不好意思一个人问。比如说 UnboundMethod, 很容易让人与如 js, python 等语言进行对比,但在经过试验,发现 ruby 的方法对象检测比较严格,只有同一个类的实例才能够绑定和调用,就会浅尝辄止,轻易做出没有用的判断。只有等真正需要用到或看到相关用例后才会对其用处有所了解。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号