# Define a named value only once

``

    defonce  name (symbol)

Allows you to assign the result of some code to a name, with the property that the code will only execute once - therefore stopping re-definitions. This is useful for defining values that you use in your compositions but you don’t want to reset every time you press run. You may force the block to execute again regardless of whether or not it has executed once already by using the override option (see examples).

Introduced in v2.0

## Options

override: | If set to true, re-definitions are allowed and this acts like define

## Examples

# Example 1
``
    defonce :foo do
        sleep 1

        puts "hello"
        10
      end

      puts foo

      puts foo

      defonce :foo do
        puts "you can't redefine me"
        15
      end

      puts foo

      3.times do
        play foo
      end
| ``
    # Define a new function called foo
    # Sleep for a beat in the function definition. Note that this amount
    # of time in seconds will depend on the current BPM of the live_loop
    # or thread calling this function.
    # Print hello
    # Return a value of 10

    # Call foo on its own
    # The run sleeps for a beat and prints "hello" before returning 10

    # Try it again:
    # This time the run doesn't sleep or print anything out. However, 10 is still returned.

    # Try redefining foo

    # We still don't see any printing or sleeping, and the result is still 10

    # You can use foo anywhere you would use normal code.
    # For example, in a block:

    # play 10
# Example 2
``
    defonce :bar do
        50
      end

      play bar

      defonce :bar do
        70
      end

      play bar

      defonce :bar, override: true do
        80
      end

      play bar
| ``
    # plays 50

    # This redefinition doesn't work due to the behaviour of defonce

    # Still plays 50

    # Force definition to take place with override option

    # plays 80