expanded explanation about self vs *self

This commit is contained in:
Chris Boesch
2026-06-21 16:16:31 +02:00
parent f3df08d8e0
commit cbcb570248
2 changed files with 21 additions and 3 deletions
+18
View File
@@ -37,6 +37,24 @@
// self, others use a lowercase version of the type name, but feel
// free to use whatever is most appropriate.
//
// "But hold on," you say, eyeing a() and b() suspiciously, "why
// does one take 'self' and another take '*self'?" Sharp eye!
//
// It all comes down to a single question: does the function need
// to CHANGE the struct?
//
// * Needs to change it? Take a pointer (*Bar). Without it you'd
// be scribbling on a COPY, and your changes would evaporate the
// instant the function returns. Poof.
// * Only reads it? Plain Bar is just fine.
// (For a big, bulky struct you might still write *const Bar to
// avoid copying it around, but for small ones a copy is cheap.)
//
// You'll see this below: zap() takes 'self: HeatRay' by value
// because it only reads the ray's damage, but it takes the alien
// as '*Alien' because zapping is supposed to HURT - and that means
// changing the alien's health for real, not on a throwaway copy.
//
// Okay, you're armed.
//
// Now, please zap the alien structs until they're all gone or
+3 -3
View File
@@ -1,6 +1,6 @@
--- exercises/047_methods.zig 2023-10-03 22:15:22.122241138 +0200
+++ answers/047_methods.zig 2023-10-05 20:04:07.056100214 +0200
@@ -88,7 +88,7 @@
--- exercises/047_methods.zig 2026-06-21 16:11:59.110876971 +0200
+++ answers/047_methods.zig 2026-06-21 16:13:07.066363558 +0200
@@ -106,7 +106,7 @@
for (&aliens) |*alien| {
// *** Zap the alien with the heat ray here! ***