Skip to content

Instantly share code, notes, and snippets.

@k3rni
Created March 18, 2020 15:10
Show Gist options
  • Save k3rni/219ec2ed072c8580534f93e0e9da9a29 to your computer and use it in GitHub Desktop.
Save k3rni/219ec2ed072c8580534f93e0e9da9a29 to your computer and use it in GitHub Desktop.
Various styles of nested method definitions
class NestedMethods
def bad
def inner
puts "bad/inner"
end
inner
end
def good_lambda
inner = -> { puts "good_lambda/inner" }
inner.call
end
def good_eigen
class << self
def inner
puts "good_eigen/inner"
end
end
inner
end
def good_ceval
self.class_eval do
def inner
puts "good_ceval/inner"
end
end
inner
end
def good_mexec
self.module_exec do
def inner
puts "good_mexec/inner"
end
end
inner
end
end
nm = NestedMethods.new
nm.bad
nm.inner rescue nil
nm.good_lambda
nm.inner rescue nil
nm.good_eigen
nm.inner rescue nil
nm.good_ceval
nm.inner rescue nil
nm.good_mexec
nm.inner rescue nil
def toplevel_bad
def inner
puts "toplevel_bad/inner"
end
inner
end
def toplevel_good_lambda
inner = -> { puts "toplevel_good_lambda/inner" }
inner.call
end
def toplevel_good_eigen
class << self
def inner
puts "toplevel_good_eigen/inner"
end
end
inner
end
def toplevel_good_ceval
self.class_eval do
def inner
puts "toplevel_good_ceval/inner"
end
end
inner
end
def toplevel_good_mexec
self.module_exec do
def inner
puts "toplevel_good_mexec/inner"
end
end
inner
end
puts "---"
toplevel_bad
inner rescue nil
toplevel_good_lambda
inner rescue nil
toplevel_good_eigen
inner rescue nil
toplevel_good_mexec
inner rescue nil
toplevel_good_ceval
inner rescue nil
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment