论坛首页 编程语言技术论坛

为什么ruby的文件操作如此的诡异

浏览 9196 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-28  
is_dir = File.directory? "xxx"
FileUtils.rm_rf "xxx"

也许只是你还没找到正确的惯用法吧?
0 请登录后投票
   发表时间:2007-04-28  
gigix 写道
is_dir = File.directory? "xxx"
FileUtils.rm_rf "xxx"

也许只是你还没找到正确的惯用法吧?


这两句不也是古怪的静态方法么?
0 请登录后投票
   发表时间:2007-04-28  
萝卜青菜,各有所爱
0 请登录后投票
   发表时间:2007-04-28  
半人马 写道
gigix 写道
is_dir = File.directory? "xxx"
FileUtils.rm_rf "xxx"

也许只是你还没找到正确的惯用法吧?


这两句不也是古怪的静态方法么?


我看才你才是混淆抽象和具体。

一个String对象"xxx"代表一个名字,一个File.new("xxx")对象代表一个文件,它的名字叫"xxx"。 没有人用String代表一个文件。
Ruby里class跟Java里class的是两码事, 它不光是一类事物的抽象。Ruby的class本身就是一个对象,有自己的行为。 File不光负责创建它的instance,还有检索和测试的功能。 File和file的关系像是词典和单词的关系, 你可以用任意字符串去检索词典,但是只有当这个字符串是一个单词时才能在词典中找到。

另外再告诉你一下,File.directory?不叫静态方法,而叫singleton方法,不要老把Java里东西套用到别的语言上去。
0 请登录后投票
   发表时间:2007-04-28  
半人马 写道
gigix 写道
is_dir = File.directory? "xxx"
FileUtils.rm_rf "xxx"

也许只是你还没找到正确的惯用法吧?


这两句不也是古怪的静态方法么?

I don't care.
只要好用就行。
比如写rakefile的时候,我会先include FileUtils,然后就可以
cd "path/to/work/dir" do
  cp "some/file", "some/path"
  mv "some/file", "some/path"
  rm_rf "some/path"
end

设计优雅又如何?我只要方便。
0 请登录后投票
   发表时间:2007-04-28  
半人马 写道
yananay 写道
njmzhang 写道
你能保证file = File.new("xxx")  都能返回一个file对象吗?


当然能了


既然使用ruby,就习惯她的方式吧,很多时候,不需要问为什么


我猜测你的意思是在说:这的确是ruby设计的缺陷。

就象一个貌美如花的女人,既然娶了她,就习惯她的狐臭吧,很多时候,不需要问为什么,:)


不是,我的意思是每个东西都有自己的特点,习惯了就好了。
0 请登录后投票
   发表时间:2007-04-28  
to njmzhang: 按照你的逻辑,anyObject.exist?这种方法的存在似乎是一种错误,呵呵。

to gigix: 在我说一个女人有狐臭的时候,兄台告诉我她的狐臭在夏天有熏蚊子的功效,而你因此更加热爱这个女人,这个我是完全同意的:)。

我已经得到我想要的答案,谢谢各位,可以结帖了。
0 请登录后投票
   发表时间:2007-04-28  
半人马 写道
to njmzhang: 按照你的逻辑,anyObject.exist?这种方法的存在似乎是一种错误,呵呵。

to gigix: 在我说一个女人有狐臭的时候,兄台告诉我她的狐臭在夏天有熏蚊子的功效,而你因此更加热爱这个女人,这个我是完全同意的:)。

我已经得到我想要的答案,谢谢各位,可以结帖了。

换句话说,你要的是设计优雅的库,而不是方便好用的库。
恩,我觉得你说的那个比喻很好。
0 请登录后投票
   发表时间:2007-04-28  
半人马 写道
to njmzhang: 按照你的逻辑,anyObject.exist?这种方法的存在似乎是一种错误,呵呵。



这种方法本来就是个错误,anObject是一个变量,如果它指向一个对象,那么exist?必然返回true。你能往一个不存在的对象发送消息exist?吗
就好像是问一个人“你是不是人”一样傻

PS: Python里的文件测试方法也是在一个单独的模块里,
os.path.exists(), os.path.isdir(), os.path.isfile()

0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics