this post was submitted on 01 Jun 2022
8 points (100.0% liked)

Rust Programming

8011 readers
1 users here now

founded 5 years ago
MODERATORS
top 6 comments
sorted by: hot top controversial new old
[–] northbound_goat@szmer.info 8 points 2 years ago (1 children)

Most functional languages, like Haskell, ML family (SML, OCaml, F#). They're usually not using an enum keyword though.

[–] Ephera@lemmy.ml 7 points 2 years ago

Yeah, in language theory, this kind of thing is called an "Algebraic Data Type": https://en.wikipedia.org/wiki/Algebraic_data_type

[–] Lilac@lemmygrad.ml 6 points 2 years ago* (last edited 2 years ago)

Typed functional languages usually do, as mentioned by others. This is form of Algebraic Data Type called a Sum Type (as oppose to a Product type, which is basically a normal struct).

Here's some examples of creating a binary tree in different languages (also Lemmy's code formatter is terrible)

ExamplesHaskell

data Tree a = Empty | Leaf a | Node (Tree a) (Tree a)

F#

type Tree<'a> = Empty | Leaf of 'a | Node of (Tree<'a> * Tree<'a>)

Scala

sealed trait Tree[+A]

case class Empty[A]() extends Tree[A]

case class Leaf[A](a: A) extends Tree[A]

case class Node[A](left: Tree[A], right: Tree[A]) extends Tree[A]

Rust

enum Tree<T> {

​ Empty,

​ Leaf(T),

​ Node(Box<Tree<T>>, Box<Tree<T>>),

}

[–] OsrsNeedsF2P@lemmy.ml 1 points 2 years ago (1 children)

Can you give examples? From the description, it seems like most languages (like Java) can store data in enums?

[–] acabjones@lemmygrad.ml 4 points 2 years ago (1 children)

I think they mean that enum variants can contain fields, i.e. individual variants are themselves structs or tuple structs. AFAIK the closest thing to this in a C-like lang would be a tagged union type.

[–] lemtoman@lemmy.ml 3 points 2 years ago

oh yes thats what i mean. Coded in rust, loved this feature, went back to python a bit and became sad that I couldnt do the same. Feels stupid that a variable can be different types depending on the situation, and having a dataclass where just one field is relevant seems too dumb