Closures

2 minutes
Share the link to this page
Copied
  Completed
You need to have access to the item to view this lesson.
One-time Fee
$69.99
List Price:  $99.99
You save:  $30
€66.48
List Price:  €94.97
You save:  €28.49
£55.48
List Price:  £79.27
You save:  £23.78
CA$98.33
List Price:  CA$140.47
You save:  CA$42.14
A$107.87
List Price:  A$154.11
You save:  A$46.23
S$93.98
List Price:  S$134.26
You save:  S$40.28
HK$544.62
List Price:  HK$778.06
You save:  HK$233.44
CHF 61.72
List Price:  CHF 88.17
You save:  CHF 26.45
NOK kr776.67
List Price:  NOK kr1,109.57
You save:  NOK kr332.90
DKK kr495.83
List Price:  DKK kr708.36
You save:  DKK kr212.53
NZ$118.77
List Price:  NZ$169.68
You save:  NZ$50.90
د.إ257.07
List Price:  د.إ367.26
You save:  د.إ110.18
৳8,384.83
List Price:  ৳11,978.85
You save:  ৳3,594.01
₹5,909.65
List Price:  ₹8,442.72
You save:  ₹2,533.07
RM310.93
List Price:  RM444.20
You save:  RM133.27
₦118,108.82
List Price:  ₦168,734.12
You save:  ₦50,625.30
₨19,496.15
List Price:  ₨27,852.84
You save:  ₨8,356.68
฿2,416.22
List Price:  ฿3,451.90
You save:  ฿1,035.67
₺2,425.32
List Price:  ₺3,464.89
You save:  ₺1,039.57
B$407.22
List Price:  B$581.77
You save:  B$174.54
R1,267.41
List Price:  R1,810.66
You save:  R543.25
Лв130.20
List Price:  Лв186.01
You save:  Лв55.81
₩97,475.91
List Price:  ₩139,257.28
You save:  ₩41,781.36
₪255.36
List Price:  ₪364.82
You save:  ₪109.45
₱4,110.68
List Price:  ₱5,872.66
You save:  ₱1,761.97
¥10,596.44
List Price:  ¥15,138.42
You save:  ¥4,541.98
MX$1,447.86
List Price:  MX$2,068.47
You save:  MX$620.60
QR255.83
List Price:  QR365.49
You save:  QR109.65
P957.28
List Price:  P1,367.60
You save:  P410.32
KSh9,063.70
List Price:  KSh12,948.70
You save:  KSh3,885
E£3,476.05
List Price:  E£4,966
You save:  E£1,489.95
ብር8,780.73
List Price:  ብር12,544.44
You save:  ብር3,763.70
Kz63,807.13
List Price:  Kz91,156.95
You save:  Kz27,349.82
CLP$68,429.22
List Price:  CLP$97,760.22
You save:  CLP$29,331
CN¥507.13
List Price:  CN¥724.50
You save:  CN¥217.37
RD$4,230.16
List Price:  RD$6,043.35
You save:  RD$1,813.18
DA9,356.77
List Price:  DA13,367.38
You save:  DA4,010.61
FJ$158.89
List Price:  FJ$226.99
You save:  FJ$68.10
Q541.54
List Price:  Q773.67
You save:  Q232.12
GY$14,679.97
List Price:  GY$20,972.29
You save:  GY$6,292.31
ISK kr9,633.42
List Price:  ISK kr13,762.62
You save:  ISK kr4,129.20
DH703.39
List Price:  DH1,004.89
You save:  DH301.49
L1,281.87
List Price:  L1,831.32
You save:  L549.45
ден4,093.12
List Price:  ден5,847.57
You save:  ден1,754.44
MOP$562.43
List Price:  MOP$803.51
You save:  MOP$241.07
N$1,269.65
List Price:  N$1,813.87
You save:  N$544.21
C$2,582.26
List Price:  C$3,689.10
You save:  C$1,106.84
रु9,463.39
List Price:  रु13,519.71
You save:  रु4,056.31
S/264.78
List Price:  S/378.27
You save:  S/113.49
K282.85
List Price:  K404.09
You save:  K121.24
SAR263.02
List Price:  SAR375.76
You save:  SAR112.74
ZK1,934.85
List Price:  ZK2,764.20
You save:  ZK829.34
L330.84
List Price:  L472.66
You save:  L141.81
Kč1,681.68
List Price:  Kč2,402.50
You save:  Kč720.82
Ft27,373.74
List Price:  Ft39,107.03
You save:  Ft11,733.28
SEK kr765.13
List Price:  SEK kr1,093.09
You save:  SEK kr327.96
ARS$70,495.75
List Price:  ARS$100,712.53
You save:  ARS$30,216.78
Bs484.88
List Price:  Bs692.72
You save:  Bs207.83
COP$306,405.11
List Price:  COP$437,740.35
You save:  COP$131,335.24
₡35,854.29
List Price:  ₡51,222.61
You save:  ₡15,368.32
L1,774.67
List Price:  L2,535.36
You save:  L760.68
₲547,554.16
List Price:  ₲782,253.76
You save:  ₲234,699.59
$U2,999.11
List Price:  $U4,284.63
You save:  $U1,285.51
zł286.41
List Price:  zł409.17
You save:  zł122.76
Already have an account? Log In

Transcript

You'll encounter closures when you want to spawn a thread, or when you want to do some functional programming with iterators and did some other common places in the standard library. So let's learn about closures. A closure is an anonymous function that can borrow or capture some data from the scope it is nested in. The syntax is a parameter list between two pipes without type annotations followed by a block. This creates an anonymous function called a closure that you can call later. The types of the arguments and the return value are all inferred from how you use the arguments and what you return.

So let's assign this closure to a variable called add and then call it with one and two, which will be added together and return three. Let's go back to our closure again. You don't have to have any parameters. You can just leave the parameter list empty. Technically, you can leave the block empty as well, but that's not very interesting. What is really interesting is that a closure will be borrow a reference to values in the enclosing scope.

Let's look at an example of that. Here we create a string s and then we create a closure that borrows a reference to s, which works because the print line macro actually wants a reference anyway. Then we assign the closure to the variable F, and whenever we call F, it prints a strawberry. This is great if your closure never outlives the variable that is referencing but the compiler won't let us send this over to another thread because another thread might live longer than this thread. Lucky for us closures also support move semantics. So we can force the closure to move any variables that uses into itself and take ownership of them.

Now S is owned by the closure and it will live until the closure itself goes out of scope and gets dropped. So we could send this closure over to another thread or return it as the value of a function or do whatever we want with it. If you want to do some functional style programming closures will be your close friends call ITER on a vector to get iterator and a whole bunch of methods that use closures will be available to you. Here's an example of using map and a closure to multiply each item in a vector by three, then filter in a closure to discard any values that aren't greater than 10 and then fold with an initial value and a closure to some the remaining values together. In the next video, we will talk about threats.

Sign Up

Share

Share with friends, get 20% off
Invite your friends to LearnDesk learning marketplace. For each purchase they make, you get 20% off (upto $10) on your next purchase.