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
€65.59
List Price:  €93.70
You save:  €28.11
£56.11
List Price:  £80.17
You save:  £24.05
CA$96.29
List Price:  CA$137.56
You save:  CA$41.27
A$108.61
List Price:  A$155.17
You save:  A$46.55
S$95.18
List Price:  S$135.98
You save:  S$40.79
HK$548.09
List Price:  HK$783.01
You save:  HK$234.92
CHF 63.62
List Price:  CHF 90.89
You save:  CHF 27.27
NOK kr770.78
List Price:  NOK kr1,101.16
You save:  NOK kr330.38
DKK kr489.42
List Price:  DKK kr699.21
You save:  DKK kr209.78
NZ$118.08
List Price:  NZ$168.70
You save:  NZ$50.61
د.إ257.04
List Price:  د.إ367.21
You save:  د.إ110.17
৳7,659.43
List Price:  ৳10,942.52
You save:  ৳3,283.08
₹5,847.07
List Price:  ₹8,353.31
You save:  ₹2,506.24
RM334.79
List Price:  RM478.30
You save:  RM143.50
₦90,777.03
List Price:  ₦129,687.03
You save:  ₦38,910
₨19,427.14
List Price:  ₨27,754.24
You save:  ₨8,327.10
฿2,573.47
List Price:  ฿3,676.55
You save:  ฿1,103.07
₺2,275.24
List Price:  ₺3,250.48
You save:  ₺975.24
B$366.28
List Price:  B$523.28
You save:  B$157
R1,332.50
List Price:  R1,903.66
You save:  R571.15
Лв128.20
List Price:  Лв183.15
You save:  Лв54.95
₩96,220.81
List Price:  ₩137,464.20
You save:  ₩41,243.38
₪265.25
List Price:  ₪378.95
You save:  ₪113.69
₱4,004.45
List Price:  ₱5,720.89
You save:  ₱1,716.43
¥10,808.04
List Price:  ¥15,440.72
You save:  ¥4,632.68
MX$1,187.23
List Price:  MX$1,696.11
You save:  MX$508.88
QR254.64
List Price:  QR363.78
You save:  QR109.14
P964.57
List Price:  P1,378.02
You save:  P413.44
KSh9,308.67
List Price:  KSh13,298.67
You save:  KSh3,990
E£3,394.91
List Price:  E£4,850.08
You save:  E£1,455.17
ብር3,970.94
List Price:  ብር5,673.01
You save:  ብር1,702.07
Kz58,616.62
List Price:  Kz83,741.62
You save:  Kz25,125
CLP$68,515.31
List Price:  CLP$97,883.21
You save:  CLP$29,367.90
CN¥506.66
List Price:  CN¥723.83
You save:  CN¥217.17
RD$4,125.31
List Price:  RD$5,893.56
You save:  RD$1,768.24
DA9,412.64
List Price:  DA13,447.21
You save:  DA4,034.56
FJ$158.92
List Price:  FJ$227.04
You save:  FJ$68.12
Q542.78
List Price:  Q775.43
You save:  Q232.65
GY$14,611.69
List Price:  GY$20,874.74
You save:  GY$6,263.05
ISK kr9,858.79
List Price:  ISK kr14,084.59
You save:  ISK kr4,225.80
DH708.36
List Price:  DH1,011.98
You save:  DH303.62
L1,252.84
List Price:  L1,789.85
You save:  L537.01
ден4,036.97
List Price:  ден5,767.34
You save:  ден1,730.37
MOP$562.89
List Price:  MOP$804.17
You save:  MOP$241.27
N$1,328.43
List Price:  N$1,897.84
You save:  N$569.40
C$2,568.70
List Price:  C$3,669.73
You save:  C$1,101.03
रु9,342.21
List Price:  रु13,346.58
You save:  रु4,004.37
S/262.58
List Price:  S/375.13
You save:  S/112.55
K265.26
List Price:  K378.96
You save:  K113.70
SAR262.55
List Price:  SAR375.09
You save:  SAR112.53
ZK1,763.89
List Price:  ZK2,519.95
You save:  ZK756.06
L326.30
List Price:  L466.17
You save:  L139.86
Kč1,658.23
List Price:  Kč2,369.01
You save:  Kč710.77
Ft25,839.41
List Price:  Ft36,915.02
You save:  Ft11,075.61
SEK kr762.42
List Price:  SEK kr1,089.22
You save:  SEK kr326.80
ARS$60,837.09
List Price:  ARS$86,913.85
You save:  ARS$26,076.76
Bs483.29
List Price:  Bs690.45
You save:  Bs207.15
COP$273,779.82
List Price:  COP$391,130.80
You save:  COP$117,350.97
₡34,969.07
List Price:  ₡49,957.95
You save:  ₡14,988.88
L1,722.93
List Price:  L2,461.44
You save:  L738.50
₲516,485.32
List Price:  ₲737,867.79
You save:  ₲221,382.47
$U2,722.73
List Price:  $U3,889.78
You save:  $U1,167.05
zł284.09
List Price:  zł405.87
You save:  zł121.77
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.