tlilley

tlilley

Hey there - I am working with an elixir app where some of our business logic is defined in a config file. However, as time has gone on, we have noticed a lot of repetition in this file. That leads me to ask two questions. Take the following as an example snippet of what our config is like:

config :candy_app, :candy_flavors,
  default: [a: 1, b: 1, c:1],
  fruity: [a: 1, b: 1],
  chocolate: [a: 1, b: 1, c:1, d:1],
  vanilla: [a: 1, b: 1, c:1, d:1],
  caramel: [a: 1, b: 1, c:1, d:1],
  1. Is there a way to define a constant for a given value within the config file and then just reference that constant? Something like the following (although it doesn’t appear that @ will work since the config is defined outside of a module and you cannot invoke @/1 outside a module):
@default_flavors [a: 1, b: 1, c:1]
config :candy_app, :candy_flavors,
  default: @default_flavors,
  fruity: @default_flavors -- [c:1],
  chocolate: @default_flavors ++ [d:1],
  vanilla: @default_flavors ++ [d:1],
  caramel: @default_flavors ++ [d:1],
  1. Is there a way to define the same value for multiple keys in a keyword list without re-writing out that value multiple times? This would save a lot of space, especially since our real world config values are much longer than those in the example. I’m thinking something like this (although this doesn’t appear to work):
config :candy_app, :candy_flavors,
  default: [a: 1, b: 1, c:1],
  fruity: [a: 1, b: 1],
  chocolate:
  vanilla:
  caramel: 
    [a: 1, b: 1, c:1, d:1]

Is there any way to achieve what I am trying to do here? Any tips on approaches to take other than the two I listed above? I’d sure appreciate it! Thanks in advance.

Showing Posts 1 to 3

kwando

kwando

Isn’t a regular variable working in the config file?
Or am I missing something here :thinking:

tlilley

tlilley OP

Oh wow. I’ll spare the reasons why I thought I had tried that and found that it didn’t work. But after your suggestion I tried the equivalent of this:

default_flavors = [a: 1, b: 1, c:1]
config :candy_app, :candy_flavors,
  default: default_flavors,
  fruity: default_flavors -- [c:1],
  chocolate: default_flavors ++ [d:1],
  vanilla: default_flavors ++ [d:1],
  caramel: default_flavors ++ [d:1],

And that does indeed appear to work. Despite the temptation to remove it, I’ll leave my question up in case someone else makes the same foolish mistake in the future :sweat_smile:

moogle19

moogle19

If you really want to remove items from the keyword list, maybe consider using Keyword.delete/2 or Keyword.drop/2 otherwise you have to change your config in 2 places when the value of :c changes.

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews