Commit 292d0cbdad

Andrew Kelley <superjoe30@gmail.com>
2018-04-09 00:03:02
add docs for union methods
1 parent eae355d
Changed files (1)
doc/langref.html.in
@@ -2033,7 +2033,27 @@ test "union variant switch" {
     assert(mem.eql(u8, what_is_it, "this is a number"));
 }
 
-// TODO union methods
+// Unions can have methods just like structs and enums:
+
+const Variant = union(enum) {
+    Int: i32,
+    Bool: bool,
+
+    fn truthy(self: &const Variant) bool {
+        return switch (*self) {
+            Variant.Int => |x_int| x_int != 0,
+            Variant.Bool => |x_bool| x_bool,
+        };
+    }
+};
+
+test "union method" {
+    var v1 = Variant { .Int = 1 };
+    var v2 = Variant { .Bool = false };
+
+    assert(v1.truthy());
+    assert(!v2.truthy());
+}
 
 
 const Small = union {