[swift-evolution] Cancelable named defer statements
Derrick Ho
wh1pch81n at gmail.com
Sun Jan 8 13:33:42 CST 2017
Its probably better to use a Boolean variable close_file to "cancel" it,
rather than change the entire language.
func openFile(kind: String) -> UnsafeMutablePointer<FILE>? {
var file = fopen("MyFile.txt", "r")
var close_file = true
defer { if close_file { fclose(file) }} // <--
if fileIsNotValid(file) { return nil }
if fileDoesNotContainsData(file, kind) { return nil }
if fileDataOutOfDate(file) { return nil }
// Prevent the deferred handler from closing the file
close_file = false // <--
return file
}
On Sat, Jan 7, 2017 at 1:20 PM Rien via swift-evolution <
swift-evolution at swift.org> wrote:
> Is there any interest in a proposal to introduce a named defer statement
> that can be cancelled?
>
> Lately I find myself writing this kind of code:
>
> func openFile(kind: String) -> UnsafeMutablePointer<FILE>? {
>
>
> var file = fopen("MyFile.txt", "r")
>
>
> var closeFile = true
>
> defer { if closeFile { fclose(file) } }
>
>
> if fileIsNotValid(file) { return nil }
>
> if fileDoesNotContainsData(file, kind) { return nil }
>
>
> if fileDataOutOfDate(file) { return nil }
>
>
> // Prevent the deferred handler from closing the file
> closeFile = false
>
> return file
> }
>
> Which imo would be much cleaner if we were able to write:
>
> func openFile(kind: String) -> UnsafeMutablePointer<FILE>? {
>
> var file = fopen("MyFile.txt", "r")
>
> CLOSE_FILE: defer { fclose(file) }
>
> if fileIsNotValid(file) { return nil }
>
> if fileDoesNotContainsData(file, kind) { return nil }
>
> if fileDataOutOfDate(file) { return nil }
>
> // Prevent the deferred handler from closing the file
> cancel CLOSE_FILE
>
> return file
> }
>
> Regards,
> Rien
>
> Site: http://balancingrock.nl
> Blog: http://swiftrien.blogspot.com
> Github: http://github.com/Swiftrien
> Project: http://swiftfire.nl
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170108/3adbf932/attachment.html>
More information about the swift-evolution
mailing list