首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有类似于上下文管理器的东西,这样就不需要运行关闭输入端口?

是否有类似于上下文管理器的东西,这样就不需要运行关闭输入端口?
EN

Stack Overflow用户
提问于 2022-07-03 09:24:49
回答 1查看 22关注 0票数 0
代码语言:javascript
复制
#!/usr/bin/env racket
#lang racket/base

(require net/url racket/port)
(require (planet neil/html-parsing:3:0))

(define p (get-pure-port (string->url "https://www.rosettacode.org/wiki/Web_scraping")))
(define my-html (port->string p))
(close-input-port p)

是否有另一种方法可以重写上述代码,这样就不需要显式地指示(close-input-port p)?我想到了类似的call-with-input-file,一旦读取文件的工作完成(类似于Python中的上下文管理器),就会关闭端口。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-03 09:44:03

在这种情况下,您可以使用call/input-url

代码语言:javascript
复制
(define my-html
   (call/input-url (string->url "https://www.rosettacode.org/wiki/Web_scraping")
                   get-pure-port port->string))

它使用给定的连接函数从URL打开端口,用该端口调用处理程序函数,并在返回处理程序的返回值之前关闭端口。

开放端口的许多Scheme和Racket特定的函数类别都具有等价性,就像我在回答另一个问题时使用的call-with-input-file一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72845359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档