锁定老帖子 主题:为什么ruby的文件操作如此的诡异
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-28
ruby 代码
ruby 代码
看起来ruby的文件功能一部分通过File对象来完成(如file.readlines), 一部分却要通过字符串和一系列古怪的类的静态方法(如File.xxx, FileTest.xxx,PathName.xxx,Dir.xxx)来完成,真是一片混乱啊,实在很让人想不通。 或者语言设计者/标准库设计者另有深意?有人能解释吗? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-28
你能保证file = File.new("xxx") 都能返回一个file对象吗?
|
|
返回顶楼 | |
发表时间:2007-04-28
njmzhang 写道 你能保证file = File.new("xxx") 都能返回一个file对象吗?
当然能了 既然使用ruby,就习惯她的方式吧,很多时候,不需要问为什么 |
|
返回顶楼 | |
发表时间:2007-04-28
yananay 写道 njmzhang 写道 你能保证file = File.new("xxx") 都能返回一个file对象吗?
当然能了 既然使用ruby,就习惯她的方式吧,很多时候,不需要问为什么 我猜测你的意思是在说:这的确是ruby设计的缺陷。 就象一个貌美如花的女人,既然娶了她,就习惯她的狐臭吧,很多时候,不需要问为什么,:) |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间: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的实现。 |
|
返回顶楼 | |
发表时间:2007-04-28
Java的实现就一定是合理的?
FileTest的目的就是做测试,File的目的是文件操作 测试不需要有副作用。 |
|
返回顶楼 | |
发表时间:2007-04-28
njmzhang 写道 Java的实现就一定是合理的?
FileTest的目的就是做测试,File的目的是文件操作 测试不需要有副作用。 好,我们从OO的角度先来界定一下什么是合理。 OO的目标是对真实世界的抽象,这种抽象越接近人类的自然思维,就越合理。 对于文件的两个操作:“我想看看这个文件是否存在”“如果这个文件存在,我想删除这个文件”中,“这个文件”指的应该是同一实体?既然是同一实体,为什么需要有不同的抽象(String vs File)? 我不认为FileTest这个类有存在的必要。我认为Java对File的抽象更合理。 |
|
返回顶楼 | |
发表时间:2007-04-28
半人马 写道 njmzhang 写道 Java的实现就一定是合理的?
FileTest的目的就是做测试,File的目的是文件操作 测试不需要有副作用。 “我想看看这个文件是否存在”“如果这个文件存在,我想看看这个文件的内容”中,“这个文件”指的应该是同一实体?既然是同一实体,为什么需要有不同的抽象(String vs File)? 关键是这个文件可能还不存在,这个文件不存在的时候,自然没有File这个实体 |
|
返回顶楼 | |
发表时间:2007-04-28
njmzhang 写道 关键是这个文件可能还不存在,这个文件不存在的时候,自然没有File这个实体 呵呵,我认为你在混淆抽象和具体。 |
|
返回顶楼 | |