Julia as a Second Language by Erik Engheim

Julia as a Second Language by Erik Engheim

Author:Erik Engheim [Engheim, Erik]
Language: eng
Format: epub
Publisher: Manning Publications Co.
Published: 2023-03-21T23:00:00+00:00


10.2 Using nothing in data structures

The multistage rocket is similar to a more generic data structure called a linked-list. Just like with the rocket example, it can often be useful to chain together multiple objects. You could, for example, use this to represent a train made up of multiple wagons holding some cargo. The following definition will not work. Can you determine why?

Listing 10.2 Defining an infinite train

struct Wagon cargo::Int ❶ next::Wagon ❷ end cargo(w::Wagon) = w.cargo + cargo(w.next) ❸

❶ Tons of cargo in the train wagon

❷ The next wagon linked to this one

❸ Calculate the total cargo in all wagons.

There is no way of building a train made out of these wagons with the definition we have given. I’ll clarify with an example:

train = Wagon(3, Wagon(4, Wagon(1, Wagon(2, ....))))

There is no way to end this chain of wagons. Every Wagon constructor requires a wagon object as its second argument. To illustrate an infinite chain of wagons I inserted .... in the code example. The next field always has to be a Wagon. But what if you made Wagon an abstract type instead? That is one possible solution, which was already employed in the multistage rocket example.

Remember, not every Rocket subtype had a next stage field. However, in this chapter I will introduce a more generic solution to this problem, utilizing parametric types. This will just cover the basics, since chapter 18 is completely devoted to parametric types.

Important Parametric types may look like an add-on feature only of interest to advanced Julia programmers. However, I have deliberately minimized usage of parametric types in the code examples. Real-world Julia code uses parametric types extensively. Parametric types are crucial for type correctness, performance, and reducing code duplication.



Download



Copyright Disclaimer:
This site does not store any files on its server. We only index and link to content provided by other sites. Please contact the content providers to delete copyright contents if any and email us, we'll remove relevant links or contents immediately.