From 3d87eec94a4778cabd48726b00867a0092de5ad0 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Thu, 27 Jul 2023 08:26:59 +0900 Subject: Add examples of `return` in `eval` --- spec/ruby/core/kernel/eval_spec.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'spec/ruby/core/kernel/eval_spec.rb') diff --git a/spec/ruby/core/kernel/eval_spec.rb b/spec/ruby/core/kernel/eval_spec.rb index 4acb87c729..3dfc863368 100644 --- a/spec/ruby/core/kernel/eval_spec.rb +++ b/spec/ruby/core/kernel/eval_spec.rb @@ -226,6 +226,20 @@ describe "Kernel#eval" do -> { eval("return :eval") }.call.should == :eval end + it "returns from the method calling #eval when evaluating 'return'" do + def eval_return(n) + eval("return n*2") + end + -> { eval_return(3) }.call.should == 6 + end + + it "returns from the method calling #eval when evaluating 'return' in BEGIN" do + def eval_return(n) + eval("BEGIN {return n*3}") + end + -> { eval_return(4) }.call.should == 12 + end + it "unwinds through a Proc-style closure and returns from a lambda-style closure in the closure chain" do code = fixture __FILE__, "eval_return_with_lambda.rb" ruby_exe(code).chomp.should == "a,b,c,eval,f" -- cgit v1.2.3