Go 的 defer 语句的使用场景比 C++ 的析构函数和 Python 的 with 语句更加丰富,有什么办法能在其他编程语言中用上 Go 的 defer 语句吗?
Go 的 defer 语句的使用场景比 C++ 的析构函数和 Python 的 with 语句更加丰富,有什么办法能在其他编程语言中用上 Go 的 defer 语句吗?
|
simple2025Aug 1, 2020
1
python 有 with,为什么要 defer?
|
|
mind3xAug 1, 2020
2
java 有 try with resource, 为什么 defer?
|
|
pp22Aug 1, 2020 via Android
3
很简单 ,自己写一个 go,想用什么语句都可以
|
|
wspsxingAug 1, 2020 via Android
4
rust 有 drop,为什么要 defer
|
|
ysc3839Aug 1, 2020 via Android
6
C++ 通过析构函数可以实现 scope exit,看上去和 golang 的 defer 差不多。
|
|
aloxafAug 1, 2020
7
Rust 还真有这么个库……叫 scopedguard,用的人还意外地挺多的……
原理是定义一个类型,初始化时接受一个闭包,然后析构时调用这个闭包 再定义一个 defer! 宏简化一下初始化流程即可 看了一下实现还挺灵活的,甚至可以选择执行的时机——总是执行、仅 panic 时执行、仅未 panic 时执行 C++ 用同样的方式应该也能做到 |
|
lcodeAug 1, 2020
8
感觉在给 go 招黑
|
|
allAboutDbmssAug 1, 2020
9
C++
```c++ struct Defer { /// The deferred function. std::function<void()> fn; /// Constructor. explicit Defer(std::function<void()> fn) : fn(std::move(fn)) {} /// Destructor. /// Calls the deferred function. ~Defer() { fn(); } /// Runs the deferred funciton. void run() { fn(); fn = [](){}; } }; ``` |
|
10
如何在其他编程语言中用上 Go 的 if err != nil....
|
|
sardinaAug 2, 2020 via iPhone
11
python 把 with 重命名 defer
|
|
lxk11153Aug 2, 2020
12
如何在小霸王上完极品飞车 [doge]
|
|
itskingnameAug 2, 2020
13
不要听楼上的人乱说,在 Python 里面,最接近 defer 的是 contextlib.ExitStack
它的使用方法看我这篇文章:[一日一技:在 Python 中实现延迟调用 ]( https://mp.weixin.qq.com/s?__biz=MzI2MzEwNTY3OQ==&mid=2648978231&idx=1&sn=dd091611fcf1aa0c2aef9655f13e7731&chksm=f2506ed7c527e7c1f2430d5303a3e93d60d0bae88949b03457dbc3bb794f538bc54a91efd6de&token=1008659887&lang=zh_CN#rd) |
|
chenxytwAug 2, 2020
14
@itskingname ?这本质上不就是 with 么,只是帮你写了个统一的 contextmanager 而已.....
|
|
itskingnameAug 2, 2020
15
@chenxytw 不一样,这里有一个调用栈的问题。先进栈的函数后执行,后进栈的函数先执行。单纯用 with 是无法实现的。
|
|
locozAug 2, 2020
16
@itskingname #13 骚
|
|
nyz1500Aug 2, 2020
17
Swift 有 defer,为什么要 defer (x
|