Closures in Rust

แชร์
ฝัง
  • เผยแพร่เมื่อ 20 พ.ย. 2024

ความคิดเห็น • 106

  • @letsgetrusty
    @letsgetrusty  3 ปีที่แล้ว +13

    📝 Get your *FREE Rust cheat sheet* : www.letsgetrusty.com/cheatsheet

  • @kid_kulafu_1727
    @kid_kulafu_1727 3 ปีที่แล้ว +21

    god damn this is a fucking gem. Im tired of reading and falling asleep. Thank my dude!

  • @RoamingAdhocrat
    @RoamingAdhocrat ปีที่แล้ว +9

    did you choose the random number 7 with a fair dice roll?

  • @ladyViviaen
    @ladyViviaen 3 ปีที่แล้ว +26

    finally learned closures, it seems to just be a function that captures its env and has extremely weird syntax

    • @noahhastings6145
      @noahhastings6145 2 ปีที่แล้ว +8

      *_extremely_*

    • @greyshopleskin2315
      @greyshopleskin2315 ปีที่แล้ว +5

      I think a good way to think about closures, if you are familiar with oop but not fp, is that a closure is a class with only 1 method, and a constructor that receives all vars in current scope.
      So this:
      def a():
      x = 1
      def closure():
      return x * 2
      return closure
      Is similar to:
      class Closure:
      def __init__(self, x):
      self.x = x
      def call(self):
      return self.x
      def a():
      x = 1
      return Closure(x)

  • @karstenmeinders4844
    @karstenmeinders4844 2 ปีที่แล้ว +3

    At about 15:00: IMHO, this technique is called "memoization" = storing results of expensive function calls in case of subsequent calls? Great to see that this can be quite easily be implemented in Rust (even if Haskell and the like have it built-in)

  • @Marcus_613
    @Marcus_613 8 หลายเดือนก่อน

    Thank you, as a Rust beginner, this one really helped me understanding how closure works.
    You've build an awesome channel for anyone learning Rust !

  • @tino6986
    @tino6986 3 ปีที่แล้ว +11

    Excellent work! I'm closer to fully understanding closures, but another video on them with more examples would be great!

  • @UdiTalias
    @UdiTalias หลายเดือนก่อน +2

    Your explanation that FnOnce, FnMut, and Fn are the same as calling to a regular function did the trick for me.
    FnOnce is a closure trait for - fn foo(val: i32) { ... }
    FnMut is a closure trait for - fn foo(val: &mut i32) { ... }
    Fn is a closure trait for - fn foo(val: &i32) { ... }

  • @LiiittleBigPlanet
    @LiiittleBigPlanet 3 ปีที่แล้ว +27

    Hey 👋🏻 great Video! I would love to see more about closures. Especially more complicated things with structs

  • @maksymiliank5135
    @maksymiliank5135 ปีที่แล้ว +4

    I thought that the pipes were a capture block, and the full closure definition was |captured_values|(arguments) -> return_type { code }. Thanks for the clarification

  • @activelow9297
    @activelow9297 5 หลายเดือนก่อน +2

    Really, all this rigamarole can be implemented in C or C++ by simply declaring your generator function with a static result member... and then tag it with a bool if it's been generated or not. Then you can call the generator to your heart's content and it will either generate the result (the first time) or return that result (every subsequent call).......... I'm not a Rust programmer, I am still learning, but I have watched 10-20 videos so far and I have yet to find a feature of Rust that you can't do in C++ if you choose to use the specific feature as it is implemented in C++. I am sure I will find something eventually that will prove this maxim wrong, but..... not yet.

  • @thanhliemtran1375
    @thanhliemtran1375 3 ปีที่แล้ว +4

    Thank you Bogdan, the videos that accompanies the book's examples are really usefull. I am new with Rust and your videos make the langage very approachable for a beginner like me.

  • @mariavarvaroi
    @mariavarvaroi 2 ปีที่แล้ว +3

    Great work, Bogdan! The videos are an awesome complement to the Rust book- I am watching your videos after reading the chapters, to gain extra understanding.
    Would love to see more videos on closures or any other subject. Your work is excellent, keep it up! ♥

  • @jmsdnns
    @jmsdnns 2 หลายเดือนก่อน

    Love your videos! This one was fantastic. I've used closures in other languages a lot so this was great for a way to see how Rust does it.

  • @Zombehmoviez
    @Zombehmoviez ปีที่แล้ว +1

    This explanation helped me understand closures a lot better after reading about it in the book. Nice video!

  • @samansamani4477
    @samansamani4477 2 ปีที่แล้ว +2

    man really enjoyed your explanation
    it almost make me want to learn rust...

  • @dappdevelopment1927
    @dappdevelopment1927 ปีที่แล้ว +2

    ***cough*** I would also love to see an ***"Intermediate Rust"*** series! Please!

  • @SauvikRoy
    @SauvikRoy ปีที่แล้ว +1

    This was such a beautiful example!
    I'm liking rust!
    Thanks!

  • @shubhrantyadav1538
    @shubhrantyadav1538 หลายเดือนก่อน

    Yo bro... This playlist is just too awesome. Thanks a lotttt

  • @froggyana
    @froggyana ปีที่แล้ว +1

    You really explain very well. Thank you!

  • @Kor03d
    @Kor03d 9 หลายเดือนก่อน

    I unironically love how you pronounce "шtruct". I am going to annoy so many people copying this

  • @marko-lazic
    @marko-lazic 3 ปีที่แล้ว +4

    Yes, more closures please.

  • @Megalcristo2
    @Megalcristo2 2 ปีที่แล้ว +2

    Closure are functions that capture some non-local value. Anonymous functions are functions with no name

  • @nickandrievsky5705
    @nickandrievsky5705 2 ปีที่แล้ว +30

    Thank you for interesting vid. Sorry, but lazy evaluation pattern has nothing to do with closures. Your example is over complicated. It could be way more interesting if you show different ownership examples and pitfalls of closures.

    • @demyk214
      @demyk214 ปีที่แล้ว

      No

    • @nickandrievsky5705
      @nickandrievsky5705 ปีที่แล้ว +2

      @@demyk214 What do you mean? Closures: Anonymous Functions that Capture Their Environment. As simple as that. Caching and other stuff works perfectly well with normal functions.

    • @demyk214
      @demyk214 ปีที่แล้ว

      @@nickandrievsky5705 no

    • @nickandrievsky5705
      @nickandrievsky5705 ปีที่แล้ว

      @@demyk214 no what?

    • @demyk214
      @demyk214 ปีที่แล้ว

      @@nickandrievsky5705 no

  • @sagnikbhattacharya1202
    @sagnikbhattacharya1202 3 ปีที่แล้ว +3

    Great video, very insightful!

  • @nsgirish
    @nsgirish ปีที่แล้ว +1

    Very well explained sir. Thanks

  • @UltimateMonkeyman
    @UltimateMonkeyman 3 ปีที่แล้ว +1

    Please do more video about Closures I would like to how to use them in many examples, Thank you for your video

  • @lukaszkonsek7940
    @lukaszkonsek7940 ปีที่แล้ว +2

    I'm new in rust, but I'm surprised that there is no example with closures combined with a map. Seems a compelling technique for me

  • @azephiar3863
    @azephiar3863 2 ปีที่แล้ว +1

    Your content is incredibly good, keep it up!

  • @bjugdbjk
    @bjugdbjk 2 ปีที่แล้ว +1

    More stuff on closures plsss. !!! By the way the way u teach is fantastic 👍

  • @seenlenz
    @seenlenz 2 ปีที่แล้ว +3

    Hi there, i have a question. at 10:59 on line 40, v is declared and set equal to (self.calculation)(arg) where(self.calculation) is the closure and (arg) is the parameter. I understand what's happening but I'm having trouble with the syntax. I understand why (arg) is in parenthesis since this is the syntax for passing an argument to a closure, but why is self.calculation in parenthesis?

    • @maksymiliank5135
      @maksymiliank5135 ปีที่แล้ว +2

      If you don't use the parenthesis, the compiler is going to treat this expression as a method call. Since your type doesn't implement that method, it's going to result in an error. You need to wrap closures which are stored in a field of a struct in parenthesis to avoid ambiguity.
      EDIT: The reason why this is happening is that when you call a method (for example: object.method()), the object is going to be passed as the first argument called self. This is a syntactic sugar for Object::method(object), where you pass the object explicitly. When it comes to closures, they don't necessarily have to receive 'self' as an argument.

  • @murugarajuperumalla5508
    @murugarajuperumalla5508 2 ปีที่แล้ว

    Yes please, continuation for closure again

  • @kavehtehrani
    @kavehtehrani 7 หลายเดือนก่อน

    Amazing explanation!

  • @n0kodoko143
    @n0kodoko143 ปีที่แล้ว

    I finally understand closures

  • @codelearner4449
    @codelearner4449 2 ปีที่แล้ว +1

    One more video for closures would be perfection. Adding on to @JustinMcConnell you are actuallying making rust very approachable.

  • @tanakahirosi6453
    @tanakahirosi6453 2 ปีที่แล้ว +1

    Great content! Still find it hard to actually code in rust tho, I tried implementing some easy algorithms and it was quite a pain lol.

  • @bimaadi6194
    @bimaadi6194 3 ปีที่แล้ว +3

    How about tutorial on procedural macros in rust? btw nice video as always

  • @tiagomanczak
    @tiagomanczak 2 ปีที่แล้ว +1

    Please more closure videos.

  • @ME-dg5np
    @ME-dg5np ปีที่แล้ว

    Well done !🎉

  • @reimner
    @reimner ปีที่แล้ว +1

    this is like lambda fuction in python, but has way more functionalities

  • @daque1960
    @daque1960 3 ปีที่แล้ว +2

    Thanks much! This seemed more how to make a chacher than a closure. Still great👍👍

  • @RAHUDAS
    @RAHUDAS 2 ปีที่แล้ว

    Yep I need another video

  • @kevinwang6188
    @kevinwang6188 3 ปีที่แล้ว +2

    Great work and awesome series! I enjoyed every bit of these!

  • @ZephyTheseus
    @ZephyTheseus หลายเดือนก่อน

    thank you

  • @mario7501
    @mario7501 ปีที่แล้ว +1

    I really like rust so far. I'm a bit disappointed though that there is no equivalent to generic lambdas/closures in c++. In c++ you can use a generic closure on different data types and it just overloads the ()operator.

  • @teqnify63
    @teqnify63 3 หลายเดือนก่อน

    Why would closures be necessary with this struct? Not all the way through this video yet but it’s clear to me that you could simply use a normal Fn. This doesn’t seem like a good example until the end here when we talk about scope.

  • @larsthomasdenstad9082
    @larsthomasdenstad9082 ปีที่แล้ว +1

    Why is it called a closure when it's called a lambda in other languages and a closure is actually what a local function can pick up and address?

  • @Gabonidaz
    @Gabonidaz ปีที่แล้ว

    If i get it right closures are like lambda functions in javascript or python

  • @hitesharora4883
    @hitesharora4883 11 หลายเดือนก่อน

    please add another video on closures

  • @XionicalXionical
    @XionicalXionical ปีที่แล้ว +3

    idk if its just me being tired but none of this made any sense. I dont know what it is, what it does, or what problem it solves.

  • @saaddahmani1870
    @saaddahmani1870 3 ปีที่แล้ว

    Great...Thanks..

  • @JSWarcrimes
    @JSWarcrimes 11 หลายเดือนก่อน

    Looks so easy, when Bogdan is doing it...
    But god forbid trying to modify the example - changing value type to Option led me to some atrocious code with tons of .clone() and .take().

  • @GolangDojo
    @GolangDojo 3 ปีที่แล้ว +1

    GIVE US THE COURSE!!!

  • @marcoantonio7648
    @marcoantonio7648 ปีที่แล้ว

    Does an anonymous function always implies into a closure?

  • @TheBlueye13
    @TheBlueye13 9 หลายเดือนก่อน

    Is this really the best way to cache function calls? This seems like a lot of boilerplate code that could be implemented in std.

  • @grvxs9230
    @grvxs9230 3 ปีที่แล้ว +3

    Can you upload more frequently? Like twice a week.

    • @letsgetrusty
      @letsgetrusty  3 ปีที่แล้ว +2

      Not something I have the bandwidth for right now but hopefully soon.

  • @AIstoriesHQ
    @AIstoriesHQ 2 ปีที่แล้ว +3

    Overcomplicated example

  • @manishfoodtechs
    @manishfoodtechs 3 ปีที่แล้ว

    Please some of your videos in play list are private. Shall I ignore them?

    • @letsgetrusty
      @letsgetrusty  3 ปีที่แล้ว +1

      Yes, ignore them. Those are unpublished videos. I'll look into removing them from the playlist.

  • @michalbotor
    @michalbotor 2 ปีที่แล้ว +1

    doesn't rust support higher order functions?
    this all feels more complicated than it needs to be.
    if rust did support higher order functions we could pass the reference to our expensive function as a parameter to another function and call it only if it needs to be run.

  • @thebsv
    @thebsv 8 หลายเดือนก่อน

    Why do we need closures?

  • @jaysalunke4214
    @jaysalunke4214 2 ปีที่แล้ว

    Rust is interesting

  • @jonathanmoore5619
    @jonathanmoore5619 3 ปีที่แล้ว +5

    So essentially, lambda functions in c++... Rust style.

  • @yapayzeka
    @yapayzeka 2 ปีที่แล้ว +1

    instead of telling with words I think you should've cargo run.

  • @pdform
    @pdform ปีที่แล้ว +1

    The explanation about closures is good, but the example the book uses (in the first part) is horrible. This example doesn't require closures at all, you could just use a regular function or a method without any disadvantage in terms of code simplicity. It's more an illustration of the memoization technique than of a typical use of closures...

  • @agnesakne4409
    @agnesakne4409 12 วันที่ผ่านมา

    What's the value of your videos if the content is exactly that from the book?

    • @rexsybimatrimawahyu3292
      @rexsybimatrimawahyu3292 2 วันที่ผ่านมา +1

      Tbh thats a fair question, maybe this vid is for those who are lazy reading the Book

  • @snatvb
    @snatvb ปีที่แล้ว

    it's not closure, this is lambda functions, closure - it's when your function catch data from outside scope
    let x = 1;
    let foo = || x * 2; // the lambda closures x
    let bar = |a: u32, b: u32| a * b; // this is not closure

  • @tech3425
    @tech3425 2 หลายเดือนก่อน

    yeye

  • @dmytrobortnichuk8501
    @dmytrobortnichuk8501 2 ปีที่แล้ว

    Вперше стикаюсь що в мові кложурс так сильно відрізняються від звичайних функцій

  • @umut8244
    @umut8244 2 ปีที่แล้ว +3

    Examples are overkill...

  • @echoptic775
    @echoptic775 3 ปีที่แล้ว

    Deci be bodange

  • @ardhenismuhammadaflah7818
    @ardhenismuhammadaflah7818 3 ปีที่แล้ว

    first

  • @someoneelse5005
    @someoneelse5005 9 หลายเดือนก่อน

    This video is actually pretty bad, the whole idea of what a closure is or does can be summarized in 30 seconds where you explain how it captures an outside variable, yet the video is 19 minutes, it tries to explain memoization, what an expensive call is etc, none of which are reasons to use a closure.

  • @gammyhorse
    @gammyhorse ปีที่แล้ว

    lol you think this is inexpensive because you printing only once? Dude, you're calling the constructor everytime, so what's the point? Have you benchmarked this method?