From: "JustJosh (Joshua Stowers) via ruby-core" Date: 2025-02-27T17:05:50+00:00 Subject: [ruby-core:121200] [Ruby master Feature#21160] Local return from proc Issue #21160 has been updated by JustJosh (Joshua Stowers). nobu (Nobuyoshi Nakada) wrote in #note-3: > Why not rescue `LocalJumpError`? That is definitely a better solution than requiring developers to use `next`. Thank you for the suggestion. As I understand it, the reason `break` doesn't work in my example is because the proc is "orphaned." Ref: https://docs.ruby-lang.org/en/3.3/Proc.html#class-Proc-label-Orphaned+Proc If an orphan-friendly implementation or alternative to `break` is worth considering, I would be happy to take a shot. ---------------------------------------- Feature #21160: Local return from proc https://bugs.ruby-lang.org/issues/21160#change-112138 * Author: JustJosh (Joshua Stowers) * Status: Open ---------------------------------------- When writing DSL-style helper methods, I often store block arguments as procs to use as callbacks. Using `return` in a proc will return from the context it was created in, which is unsuitable in the following example. Since procs cannot be converted to lambdas, I end up using `next` to return a value from them early. Example: ``` ruby fulfills_promise :generate_large_image do |image_data| next false if image_data.nil? puts 'Saving image..' # etc. end ``` This works but confuses most readers. I propose introducing an alias for it that is more appropriate for this use case. Perhaps `pass` or `continue`? It's worth noting that `return` would work with `fulfills_promise :foo, -> (bar) do`, though it detracts a bit from a DSL's expressiveness. -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/