From 3236b7ff284383a66df114277c0dccc09dce3e73 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Wed, 25 Nov 2020 13:21:45 +0100 Subject: Add small section about `or` expressions --- nix/nix-1p/README.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/nix/nix-1p/README.md b/nix/nix-1p/README.md index 7f6770a871..0399bc41cd 100644 --- a/nix/nix-1p/README.md +++ b/nix/nix-1p/README.md @@ -23,7 +23,8 @@ important is missing. - [`if ... then ... else ...`](#if--then--else-) - [`inherit` keyword](#inherit-keyword) - [`with` statements](#with-statements) - - [`import` / `NIX_PATH` / ``](#import--nixpath--entry) + - [`import` / `NIX_PATH` / ``](#import--nix_path--entry) + - [`or` expressions](#or-expressions) - [Standard libraries](#standard-libraries) - [`builtins`](#builtins) - [`pkgs.lib`](#pkgslib) @@ -331,6 +332,31 @@ let pkgs = import {}; in pkgs.something ``` +## `or` expressions + +Nix has a keyword called `or` which can be used to access a value from an +attribute set while providing a fallback to a default value. + +The syntax is simple: + +```nix +# Access an existing attribute +let set = { a = 42; }; +in set.a or 23 +``` + +Since the attribute `a` exists, this will return `42`. + + +``` +# ... or fall back to a default if there is no such key +let set = { }; +in set.a or 23 +``` + +Since the attribute `a` does not exist, this will fall back to returning the +default value `23`. + # Standard libraries Yes, libraries, plural. -- cgit 1.4.1