在 IO::Socket 角色中§
请参阅主要文档 in context 了解方法 close
method close(IO::Socket)
关闭套接字。
如果套接字未连接,则失败。
在 Channel 中§
请参阅主要文档 in context 了解方法 close
method close(Channel:)
正常关闭Channel。这会导致后续的send调用使用 X::Channel::SendOnClosed 终止。后续的.receive调用仍然可以消耗任何先前发送的剩余项目,但如果队列为空,则会抛出 X::Channel::ReceiveOnClosed 异常。由于您可以通过使用@()将上下文设置为数组或调用.list方法从Channel生成 Seq,因此这些方法在Channel关闭之前不会终止。whenever 块也会在关闭的Channel上正确终止。
my = Channel.new;.close;.send(1);CATCH ;# OUTPUT: «X::Channel::SendOnClosed: Cannot send a message on a closed channel»
请注意,抛出的任何异常都可能阻止调用.close,这可能会挂起接收线程。在这种情况下,使用 LEAVE 阶段器来强制调用.close。
在 IO::Pipe 中§
请参阅主要文档 in context 了解方法 close
method close(IO::Pipe: --> Proc)
关闭管道并返回管道从中派生的 Proc 对象。
在 IO::Socket::Async 中§
请参阅主要文档 in context 了解方法 close
method close(IO::Socket::Async: )
关闭已从listen Supply 或connect Promise 获得的已连接客户端IO::Socket::Async。
为了关闭由listen创建的底层侦听套接字,您可以close IO::Socket::Async::ListenSocket。有关示例,请参阅 listen。
在 Tap 中§
请参阅主要文档 in context 了解方法 close
method close(Tap:)
关闭水龙头。
在 IO::CatHandle 中§
请参阅主要文档 in context 了解方法 close
method close(IO::CatHandle: --> True)
关闭当前活动的源句柄以及任何已打开的源句柄,并清空源句柄队列。与常规 IO::Handle 不同,在 IO::CatHandle 上通常不需要显式调用 .close,因为仅仅耗尽所有输入就会关闭所有需要关闭的句柄。
with IO::CatHandle.new:
在 IO::Handle§
有关例程 close,请参阅 上下文中的主要文档
method close(IO::Handle: --> Bool)multi close(IO::Handle )
关闭一个打开的文件句柄,如果成功,则返回 True。如果文件句柄已经关闭,则不会抛出错误,但如果你关闭了一个标准文件句柄(默认情况下:$*IN、$*OUT 或 $*ERR:任何具有 native-descriptor 2 或更低的文件句柄),你将无法重新打开它们。
given "foo/bar".IO.open(:w)
使用 LEAVE phaser 来关闭句柄是一种常见的习惯用法,它确保无论如何离开块,句柄都会被关闭。
dosub do-stuff-with-the-file (IO )
注意:与其他一些语言不同,Raku 不使用引用计数,因此文件句柄在超出范围时不会关闭。虽然它们会在垃圾回收时关闭,但不能保证垃圾回收会运行。这意味着你必须对打开用于写入的句柄使用显式的 close,以避免数据丢失,并且建议对打开用于读取的句柄也使用显式的 close,以便你的程序不会同时打开太多文件,从而在进一步的 open 调用时触发异常。
请注意,一些方法允许提供 :close 参数,以便在方法调用的操作完成后关闭句柄。作为一种更简单的替代方法,IO::Path 类型提供了许多读写方法,这些方法允许你在不直接处理文件句柄的情况下使用文件。