A lambda is a kind of proc.

proc.class # returns 'Proc'
lam.class  # returns 'Proc'

That doesn't really matter, but it's worth noting.

Both are one-off bits of code you can pass around a little bit more easily than, say, a method or block.

And between the two, a Proc acts more like a "block" (e.g. .each do) and lambda acts more like a "method" (e.g. def new_method).

And those differences are:

Lambdas and methods check the number of arguments (meaning you could get the ArgumentError: wrong number of arguments (3 for 1) error and they also return from themselves, and not the enclosing method. Blocks and procs return from the greater scoped method.

By returning from itself vs

Meaning:

def some_method
  Proc.new { |x| return "hey hey" } # This would just return from the whole enclosing method
  lambda { |x| return "hey hey" } # This would just return from itself and not end the whole method
end

I think that's basically accurate. The good news is you can definitely get far without having this stuff down for sure.

If I got this wrong I'd love some additional feedback.

Classic DEV Post from Dec 31 '18

Dealing with copyright infringement and plagiarism

This is a story all about how my life got twisted upside down, and I'd like to ...

Climbing code mountain.

Hey there reader...

Do you prefer sans serif over serif?

You can change your font preferences in the "misc" section of your settings. ❤️