锁定老帖子 主题:为什么ruby的文件操作如此的诡异
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-28
is_dir = File.directory? "xxx" FileUtils.rm_rf "xxx" 也许只是你还没找到正确的惯用法吧? |
|
返回顶楼 | |
发表时间:2007-04-28
gigix 写道 is_dir = File.directory? "xxx" FileUtils.rm_rf "xxx" 也许只是你还没找到正确的惯用法吧? 这两句不也是古怪的静态方法么? |
|
返回顶楼 | |
发表时间:2007-04-28
萝卜青菜,各有所爱
|
|
返回顶楼 | |
发表时间: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里东西套用到别的语言上去。 |
|
返回顶楼 | |
发表时间: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 设计优雅又如何?我只要方便。 |
|
返回顶楼 | |
发表时间:2007-04-28
半人马 写道 yananay 写道 njmzhang 写道 你能保证file = File.new("xxx") 都能返回一个file对象吗?
当然能了 既然使用ruby,就习惯她的方式吧,很多时候,不需要问为什么 我猜测你的意思是在说:这的确是ruby设计的缺陷。 就象一个貌美如花的女人,既然娶了她,就习惯她的狐臭吧,很多时候,不需要问为什么,:) 不是,我的意思是每个东西都有自己的特点,习惯了就好了。 |
|
返回顶楼 | |
发表时间:2007-04-28
to njmzhang: 按照你的逻辑,anyObject.exist?这种方法的存在似乎是一种错误,呵呵。
to gigix: 在我说一个女人有狐臭的时候,兄台告诉我她的狐臭在夏天有熏蚊子的功效,而你因此更加热爱这个女人,这个我是完全同意的:)。 我已经得到我想要的答案,谢谢各位,可以结帖了。 |
|
返回顶楼 | |
发表时间:2007-04-28
半人马 写道 to njmzhang: 按照你的逻辑,anyObject.exist?这种方法的存在似乎是一种错误,呵呵。
to gigix: 在我说一个女人有狐臭的时候,兄台告诉我她的狐臭在夏天有熏蚊子的功效,而你因此更加热爱这个女人,这个我是完全同意的:)。 我已经得到我想要的答案,谢谢各位,可以结帖了。 换句话说,你要的是设计优雅的库,而不是方便好用的库。 恩,我觉得你说的那个比喻很好。 |
|
返回顶楼 | |
发表时间:2007-04-28
半人马 写道 to njmzhang: 按照你的逻辑,anyObject.exist?这种方法的存在似乎是一种错误,呵呵。
这种方法本来就是个错误,anObject是一个变量,如果它指向一个对象,那么exist?必然返回true。你能往一个不存在的对象发送消息exist?吗 就好像是问一个人“你是不是人”一样傻 PS: Python里的文件测试方法也是在一个单独的模块里, os.path.exists(), os.path.isdir(), os.path.isfile() |
|
返回顶楼 | |