为什么这个bracket函数叫括号?
我认为这与类型签名语法有关;类型签名中使用方括号来表示函数。让我们看看函数映射的类型签名:
map :: (a -> b) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)
map的第一个参数是一个函数。
现在,让我们来看看bracketHackage。
bracket:: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
Run Code Online (Sandbox Code Playgroud)
支架: https://hackage.haskell.org/package/base-4.16.0.0/docs/Control-Exception.html#v :bracket
好的,我明白了,括号的参数是具有 IO 操作的函数。
Hackage 的使用示例bracket如下:
bracket
(openFile "filename" ReadMode)
(hClose)
(\fileHandle -> do { ... })
Run Code Online (Sandbox Code Playgroud)
想了一会儿,我觉得“括号”这个名字不太好。
我想说“performResourceSafely”会更合适。
于是我又问:bracket函数为什么叫bracket?
Dan*_*ner 13
\n\n括号v. 在两侧绑定,包围,如用括号括起来
\n
\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xe2\x80\x94维基词典
它所做的事情bracket是将一些使用资源的操作与分配和释放该资源的操作包装在一起(要小心确保即使抛出异常也会发生释放)。因此,(取消)分配操作围绕 \xe2\x80\x93 或将 \xe2\x80\x93括起来为主操作。
您提到的文件示例特别具有启发性。[就像or的“开括号”和or(的“闭括号”一样,括号操作是“打开文件”和“关闭文件”(或者“关闭句柄”)。这种相似之处相当普遍。例如,对于数据库,一个打开和关闭一个连接,对于网络东西,一个打开和关闭一个会话,对于子进程,一个打开和关闭一个程序,等等。])
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |