Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么文件对象在它之后仍然存在';她在Ruby关门了?_Ruby_Irb - Fatal编程技术网

为什么文件对象在它之后仍然存在';她在Ruby关门了?

为什么文件对象在它之后仍然存在';她在Ruby关门了?,ruby,irb,Ruby,Irb,对象关闭后是否仍在内存中?如果是,那是因为垃圾收集还没有开始?看起来它只是被标记为已删除,而不是实际从内存中消失。这是在IRB中产生的,如果这会影响它的话 提前谢谢 1.9.3p125 :001 > f = File.open("myfile.txt", "r") => #<File:myfile.txt> 1.9.3p125 :002 > f => #<File:myfile.txt> 1.9.3p125 :002 > f.s

对象关闭后是否仍在内存中?如果是,那是因为垃圾收集还没有开始?看起来它只是被标记为已删除,而不是实际从内存中消失。这是在IRB中产生的,如果这会影响它的话

提前谢谢

1.9.3p125 :001 > f = File.open("myfile.txt", "r")
=> #<File:myfile.txt>     

1.9.3p125 :002 > f
=> #<File:myfile.txt>

1.9.3p125 :002 > f.size
 => 122 

1.9.3p125 :003 > f.close
 => nil 

1.9.3p125 :004 > f
 => #<File:myfile.txt (closed)> 
1.9.3p125:001>f=File.open(“myfile.txt”、“r”)
=> #     
1.9.3p125:002>f
=> #
1.9.3p125:002>f尺寸
=> 122 
1.9.3p125:003>f.关闭
=>零
1.9.3p125:004>f
=> # 

关闭文件后,对象仍存在于内存中。您的变量
f
包含对它的引用,因此它还不能消失。与任何其他对象一样,您仍然可以访问它,直到对它的所有引用消失。

关闭文件后,该对象仍存在于内存中。您的变量
f
包含对它的引用,因此它还不能消失。与任何其他对象一样,您仍然可以访问它,直到对它的所有引用都消失。

f
是对类
文件的引用。只要引用存在,实例(对象)就不会被垃圾回收。现在,这个特定的对象碰巧有一个名为
close
的方法,该方法导致文件被关闭,但它对引用
f
没有任何作用,需要将该引用设置为指向其他对象,垃圾收集才能启动

因此,为了摆脱对象,像其他任何对象一样,您必须为
f
指定其他对象-对于
File
或任何其他类的实例,没有特殊情况可以将此类引用归零。(事实上,如果任意方法可以悄悄地使您的引用变为
nil
,然后在您尝试使用它时导致异常,这将是一个问题。)


<> > >编辑< /强>:也考虑这样一个事实,即您可以通过调用<代码> f.Cutely.<代码>来检查文件是否关闭。如果
f
在关闭时(或关闭后的某个时间)变为
nil
,尝试调用
nil
引用上的
closed?
将导致异常…

f
是对类
文件的引用。只要引用存在,实例(对象)就不会被垃圾回收。现在,这个特定的对象碰巧有一个名为
close
的方法,该方法导致文件被关闭,但它对引用
f
没有任何作用,需要将该引用设置为指向其他对象,垃圾收集才能启动

因此,为了摆脱对象,像其他任何对象一样,您必须为
f
指定其他对象-对于
File
或任何其他类的实例,没有特殊情况可以将此类引用归零。(事实上,如果任意方法可以悄悄地使您的引用变为
nil
,然后在您尝试使用它时导致异常,这将是一个问题。)


<> > >编辑< /强>:也考虑这样一个事实,即您可以通过调用<代码> f.Cutely.<代码>来检查文件是否关闭。如果
f
在关闭时(或关闭后的某个时间)变为
nil
,尝试调用
nil
引用上的
closed?
将导致异常…

这对于文件来说并不是什么特别的事情。这是关于变量的一般性问题。如果在某个时刻,
f
突然开始丢失其引用对象,那么它将是一团混乱。这不是文件的特殊之处。这是关于变量的一般性问题。如果在某个时刻,
f
突然开始丢失它的referent,那么它将是一团混乱。我想我认为文件是不同的,因为有一个close方法。你知道close方法的实际作用吗?它只是一个标志,用来阻止任何进一步的代码对其进行操作吗?显然,
close
方法会关闭文件。也就是说,在内部,
文件
对象基本上是平台文件描述符的包装器。但是仅仅因为一个方法被称为close并不意味着它有什么特殊性,它可以在您不知道的情况下以某种方式将引用设置为
nil
。。例如,如果您要编写自己的类
MyFile
,您将如何实现
close
方法以将引用设置为
nil
?你的类的用户怎么知道是你做的,或者你只是在那个特定的方法中做的
close
只是一个词。我想我认为文件是不同的,因为有一个close方法。你知道close方法的实际作用吗?它只是一个标志,用来阻止任何进一步的代码对其进行操作吗?显然,
close
方法会关闭文件。也就是说,在内部,
文件
对象基本上是平台文件描述符的包装器。但是仅仅因为一个方法被称为close并不意味着它有什么特殊性,它可以在您不知道的情况下以某种方式将引用设置为
nil
。。例如,如果您要编写自己的类
MyFile
,您将如何实现
close
方法以将引用设置为
nil
?你的类的用户怎么知道是你做的,或者你只是在那个特定的方法中做的<代码>关闭
只是一个词。