|
@@ -0,0 +1,56 @@
|
|
|
+//
|
|
|
+// There have been several instances where it would have been
|
|
|
+// nice to use loops in our programs, but we couldn't because the
|
|
|
+// things we were trying to do could only be done at compile
|
|
|
+// time. We ended up having to do those things MANUALLY, like
|
|
|
+// NORMAL people. Bah! We are PROGRAMMERS! The computer should be
|
|
|
+// doing this work.
|
|
|
+//
|
|
|
+// An 'inline for' is performed at compile time, allowing you to
|
|
|
+// programatically loop through a series of items in situations
|
|
|
+// like those mentioned above where a regular runtime 'for' loop
|
|
|
+// wouldn't be allowed:
|
|
|
+//
|
|
|
+// inline for (.{ u8, u16, u32, u64 }) |T| {
|
|
|
+// print("{} ", .{@typeInfo(T).Int.bits});
|
|
|
+// }
|
|
|
+//
|
|
|
+// In the above example, we're looping over a list of types,
|
|
|
+// which are available only at compile time.
|
|
|
+//
|
|
|
+const print = @import("std").debug.print;
|
|
|
+
|
|
|
+// Remember Narcissus from exercise 065 where we used builtins
|
|
|
+// for reflection? He's back and loving it.
|
|
|
+const Narcissus = struct {
|
|
|
+ me: *Narcissus = undefined,
|
|
|
+ myself: *Narcissus = undefined,
|
|
|
+ echo: void = undefined,
|
|
|
+};
|
|
|
+
|
|
|
+pub fn main() void {
|
|
|
+ var narcissus: Narcissus = Narcissus {};
|
|
|
+
|
|
|
+ print("Narcissus has room in his heart for:", .{});
|
|
|
+
|
|
|
+ // Last time we examined the Narcissus struct, we had to
|
|
|
+ // manually access each of the three fields. Our 'if'
|
|
|
+ // statement was repeated three times almost verbatim. Yuck!
|
|
|
+ //
|
|
|
+ // Please use an 'inline for' to implement the block below
|
|
|
+ // for each field in the slice 'fields'!
|
|
|
+
|
|
|
+ const fields = @typeInfo(Narcissus).Struct.fields;
|
|
|
+
|
|
|
+ ??? {
|
|
|
+ if (field.field_type != void) {
|
|
|
+ print(" {s}", .{field.name});
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Once you've got that, go back and take a look at exercise
|
|
|
+ // 065 and compare what you've written to the abomination we
|
|
|
+ // had there!
|
|
|
+
|
|
|
+ print(".\n", .{});
|
|
|
+}
|