From: "nobu (Nobuyoshi Nakada) via ruby-core" Date: 2024-03-29T05:37:03+00:00 Subject: [ruby-core:117373] [Ruby master Bug#20400] Nested BEGIN{} execution order Issue #20400 has been updated by nobu (Nobuyoshi Nakada). `BEGIN` blocks are: a. executed in the order they appeared in the same nesting level. b. executed in prior to outside the block. > ```ruby > BEGIN { > print "1" > BEGIN { print "2" } > } > ``` "2" is first because it is in the inner `BEGIN` in the block for "1". > ```ruby > BEGIN { > print "1" > BEGIN { print "2" } > BEGIN { print "3" } > } > ``` Ditto, just there are multiple `BEGIN` blocks inside the same `BEGIN`. > ```ruby > BEGIN { > print "1" > BEGIN { > print "2" > BEGIN { print "3" } > } > BEGIN { print "4" } > } > ``` "3" is executed prior to "2", because it is inside the block for "2", and the rest are same as the previous example. > Is this intentional? This explanation makes sense? Anyway, tests should be improved. ---------------------------------------- Bug #20400: Nested BEGIN{} execution order https://bugs.ruby-lang.org/issues/20400#change-107532 * Author: kddnewton (Kevin Newton) * Status: Open * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- Right now there are specs for the order in which `BEGIN{}` should be executed, which is the order they appear in the file. For example: ```ruby BEGIN { print "1" } print "4" BEGIN { print "2" } print "5" BEGIN { print "3" } ``` should output "12345". However, I couldn't find any tests/specs on what happens when `BEGIN{}` is nested. The order appears to be somewhat confusing, so I wanted to clarify if it was intentional or a bug. For example: ```ruby BEGIN { print "1" BEGIN { print "2" } } ``` prints "21", and: ```ruby BEGIN { print "1" BEGIN { print "2" } BEGIN { print "3" } } ``` prints "231", and finally: ```ruby BEGIN { print "1" BEGIN { print "2" BEGIN { print "3" } } BEGIN { print "4" } } ``` prints "3241". Is this intentional? -- 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/postorius/lists/ruby-core.ml.ruby-lang.org/