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

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

浏览 9195 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-28  
为什么不是
ruby 代码
 
  1. file = File.new("xxx"
  2. isDir = file.directory?
  3. file.delete 
却是
ruby 代码
 
  1. isDir = FileTest::directory?("xxx")  
  2. File.delete("xxx")  
dir.each也会按照字符串而不是File对象来遍历。

看起来ruby的文件功能一部分通过File对象来完成(如file.readlines), 一部分却要通过字符串和一系列古怪的类的静态方法(如File.xxx, FileTest.xxx,PathName.xxx,Dir.xxx)来完成,真是一片混乱啊,实在很让人想不通。

或者语言设计者/标准库设计者另有深意?有人能解释吗?
   发表时间:2007-04-28  
你能保证file = File.new("xxx")  都能返回一个file对象吗?
0 请登录后投票
   发表时间:2007-04-28  
njmzhang 写道
你能保证file = File.new("xxx")  都能返回一个file对象吗?


当然能了


既然使用ruby,就习惯她的方式吧,很多时候,不需要问为什么
0 请登录后投票
   发表时间:2007-04-28  
yananay 写道
njmzhang 写道
你能保证file = File.new("xxx")  都能返回一个file对象吗?


当然能了


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


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

就象一个貌美如花的女人,既然娶了她,就习惯她的狐臭吧,很多时候,不需要问为什么,:)
0 请登录后投票
   发表时间:2007-04-28  
yananay 写道
njmzhang 写道
你能保证file = File.new("xxx")  都能返回一个file对象吗?


当然能了


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


irb(main):001:0> File.new("do_not_exist/do_not_exist")
Errno::ENOENT: No such file or directory - donotexist/donotexist
        from (irb):1:in `initialize'
        from (irb):1:in `new'
        from (irb):1
        from :0

irb(main):002:0> FileTest::directory?("do_not_exist/do_not_exist")
=> false
0 请登录后投票
   发表时间:2007-04-28  
njmzhang 写道
yananay 写道
njmzhang 写道
你能保证file = File.new("xxx")  都能返回一个file对象吗?


当然能了


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


irb(main):001:0> File.new("do_not_exist/do_not_exist")
Errno::ENOENT: No such file or directory - donotexist/donotexist
        from (irb):1:in `initialize'
        from (irb):1:in `new'
        from (irb):1
        from :0

irb(main):002:0> FileTest::directory?("do_not_exist/do_not_exist")
=> false


"能保证"不表示ruby会保证,你demo的是ruby的实现,并不说明这种实现合理。
关于如何保证File.new返回一个有效的File对象,可以参考一下Java的实现。
0 请登录后投票
   发表时间:2007-04-28  
Java的实现就一定是合理的?
FileTest的目的就是做测试,File的目的是文件操作
测试不需要有副作用。
0 请登录后投票
   发表时间:2007-04-28  
njmzhang 写道
Java的实现就一定是合理的?
FileTest的目的就是做测试,File的目的是文件操作
测试不需要有副作用。


好,我们从OO的角度先来界定一下什么是合理。

OO的目标是对真实世界的抽象,这种抽象越接近人类的自然思维,就越合理。

对于文件的两个操作:“我想看看这个文件是否存在”“如果这个文件存在,我想删除这个文件”中,“这个文件”指的应该是同一实体?既然是同一实体,为什么需要有不同的抽象(String vs File)?

我不认为FileTest这个类有存在的必要。我认为Java对File的抽象更合理。

0 请登录后投票
   发表时间:2007-04-28  
半人马 写道
njmzhang 写道
Java的实现就一定是合理的?
FileTest的目的就是做测试,File的目的是文件操作
测试不需要有副作用。


“我想看看这个文件是否存在”“如果这个文件存在,我想看看这个文件的内容”中,“这个文件”指的应该是同一实体?既然是同一实体,为什么需要有不同的抽象(String vs File)?



关键是这个文件可能还不存在,这个文件不存在的时候,自然没有File这个实体

0 请登录后投票
   发表时间:2007-04-28  
njmzhang 写道


关键是这个文件可能还不存在,这个文件不存在的时候,自然没有File这个实体



呵呵,我认为你在混淆抽象和具体。
0 请登录后投票
论坛首页 编程语言技术版

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