0% found this document useful (0 votes)
17 views62 pages

Lua Programming The Ultimate Beginner S Guide To Learn Lua Step by Step 3rd Edition Claudia Alves

The document promotes a collection of eBooks on programming languages, including Lua, Haskell, Go, Kotlin, Python, and Scala, available for instant download at textbookfull.com. It highlights the features and structure of the Lua programming guide, which is aimed at beginners and covers various aspects of the language in detail. The guide includes topics such as data types, functions, error handling, and object-oriented programming, making it a comprehensive resource for learning Lua step by step.

Uploaded by

jafaarmariuz25
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views62 pages

Lua Programming The Ultimate Beginner S Guide To Learn Lua Step by Step 3rd Edition Claudia Alves

The document promotes a collection of eBooks on programming languages, including Lua, Haskell, Go, Kotlin, Python, and Scala, available for instant download at textbookfull.com. It highlights the features and structure of the Lua programming guide, which is aimed at beginners and covers various aspects of the language in detail. The guide includes topics such as data types, functions, error handling, and object-oriented programming, making it a comprehensive resource for learning Lua step by step.

Uploaded by

jafaarmariuz25
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 62

Explore the full ebook collection and download it now at textbookfull.

com

Lua Programming The Ultimate Beginner s Guide to


Learn Lua Step by Step 3rd Edition Claudia Alves

https://textbookfull.com/product/lua-programming-the-
ultimate-beginner-s-guide-to-learn-lua-step-by-step-3rd-
edition-claudia-alves/

OR CLICK HERE

DOWLOAD EBOOK

Browse and Get More Ebook Downloads Instantly at https://textbookfull.com


Click here to visit textbookfull.com and download textbook now
Your digital treasures (PDF, ePub, MOBI) await
Download instantly and pick your perfect format...

Read anywhere, anytime, on any device!

Haskell The Ultimate Beginner s Guide to Learn Haskell


Programming Step by Step 1st Edition Claudia Alves

https://textbookfull.com/product/haskell-the-ultimate-beginner-s-
guide-to-learn-haskell-programming-step-by-step-1st-edition-claudia-
alves/
textbookfull.com

Go programming language The Ultimate Beginner s Guide to


Learn Go Programming Step by Step 3rd Edition John Bach

https://textbookfull.com/product/go-programming-language-the-ultimate-
beginner-s-guide-to-learn-go-programming-step-by-step-3rd-edition-
john-bach/
textbookfull.com

The Ultimate Beginner s Guide to Learn kotlin Programming


Step by Step 2020 2nd Edition Moaml Mohmmed

https://textbookfull.com/product/the-ultimate-beginner-s-guide-to-
learn-kotlin-programming-step-by-step-2020-2nd-edition-moaml-mohmmed/

textbookfull.com

Python Programming A Step By Step Guide From Beginner To


Advance Second Edition Eddison

https://textbookfull.com/product/python-programming-a-step-by-step-
guide-from-beginner-to-advance-second-edition-eddison/

textbookfull.com
Scala Programming A comprehensive beginner s guide to
Scala 2nd Edition Claudia Alves

https://textbookfull.com/product/scala-programming-a-comprehensive-
beginner-s-guide-to-scala-2nd-edition-claudia-alves/

textbookfull.com

Learn to Program with Python 3: A Step-by-Step Guide to


Programming Irv Kalb

https://textbookfull.com/product/learn-to-program-with-
python-3-a-step-by-step-guide-to-programming-irv-kalb/

textbookfull.com

Learn to Program with Python 3: A Step-by-Step Guide to


Programming, 2nd Edition Irv Kalb

https://textbookfull.com/product/learn-to-program-with-
python-3-a-step-by-step-guide-to-programming-2nd-edition-irv-kalb/

textbookfull.com

ANSI C Programming Learn ANSI C Step by Step 1st Edition


Yashavant Kanetkar

https://textbookfull.com/product/ansi-c-programming-learn-ansi-c-step-
by-step-1st-edition-yashavant-kanetkar/

textbookfull.com

Programming in Lua 4th Edition Roberto Ierusalimschy

https://textbookfull.com/product/programming-in-lua-4th-edition-
roberto-ierusalimschy/

textbookfull.com
Lua Programming
The Ultimate Beginner's Guide
to
Learn Lua Step by Step

Third edition
2021
By
Claudia Alves
& Alexander Aronowitz

TABLE OF CONTENTS
Introduction
The audience
About the third edition
Other resources
Certain Typographical Conventions
Running examples
Acknowledgments

PART I
Language
Chapter 1. Getting Started
1.1. Blocks
1.2. Some lexical conventions
1.3. Global variables
1.4. Separate interpreter
Exercises
Chapter 2. Types and values
2.1. Nil
2.2. Boolean
2.3. Numbers
2.4. Strings
Literals
Long lines
Type conversions
2.5. Tables
2.6. Functions
2.7. userdata and threads
Exercises
Chapter 3. Expressions
3.1. Arithmetic Operators
3.2. Comparison operators
3.3. Logical operators
3.4. Concatenation
3.5. Length operator
3.6. Operator Priorities
3.7. Table constructors
Exercises
Chapter 4. Operators
4.1. Assignment operators
4.2. Local variables and blocks
4.3. Control structures
if then else
while
repeat
Numeric for statement
General for statement
4.4. break, return and goto
Exercises
Chapter 5. Functions
5.1. Multiple Results
5.2. Functions with a variable number of arguments
5.3. Named arguments
Exercises
Chapter 6. More about functions
6.1. Closures
6.2. Non-global functions
6.3. Optimization of tail calls
Exercises
Chapter 7. Iterators and the generic for
7.1. Iterators and Closures
7.2. Generic for semantics
7.3. Stateless iterators
7.4. Complex State Iterators
7.5. True iterators
Exercises
Chapter 8. Compilation, Execution, and Errors
8.1. Compilation
8.2. Precompiled Code
8.3. C code
8.4. Errors
8.5. Error and Exception Handling
8.6. Error messages and call stack
Exercises
Chapter 9. Coroutines
9.1. Basics of coroutines
9.2. Channels and Filters
9.3. Coroutines as iterators
9.4. Non-displacing multi-threading
Exercises
Chapter 10. Completed Examples
10.1. The problem of eight queens
10.2. The most common words
10.3. Markov chain
Exercises
PART II
Tables and Objects
Chapter 11. Data Structures
11.1. Arrays
11.2. Matrices and multidimensional arrays
11.3. Linked Lists
11.4. Queues and double queues
11.5. Sets and Sets
11.6. Line buffers
11.7. Counts
Exercises
Chapter 12. Data Files and Persistence
12.1. Data files
12.2. Serialization
Saving tables without loops
Saving tables with loops
Exercises
Chapter 13. Metatables and Metamethods
13.1. Arithmetic metamethods
13.2. Comparison Methods
13.3. Library Metamethods
13.4. Methods for accessing the table
__Index metamethod
__Newindex metamethod
Default tables
Tracking access to a table
Read-only tables
Exercises
Chapter 14. Environment
14.1. Global variables with dynamic names
14.2. Descriptions of global variables
14.3. Non-global environments
14.4. Using _ENV
14.5. _ENV and load
Exercises
Chapter 15. Modules and Packages
15.1. Require function
Renaming a module
Search along the path
File crawlers
15.2. The Standard Approach for Writing Lua
Modules
15.3. Using environments
15.4. Submodules and Packages
Exercises
Chapter 16. Object Oriented
programming
16.1. Classes
16.2. Inheritance
16.3. Multiple inheritance
16.4. Hiding
16.5. Single Method Approach
Exercises
Chapter 17. Weak Tables and Finalizers
17.1. Weak tables
17.2. Functions with caching
17.3. Object Attributes
17.4. Again tables with default values
17.5. Ephemeral tables
17.6. Finalizers
Exercises
PART III
Standard Libraries
Chapter 18. Math Library
Exercises
Chapter 19. Library for Bitwise Operations
Exercises
Chapter 20. Library for Working with Tables
20.1. Insert and remove functions
20.2. Sorting
20.3. Concatenation
Exercises
Chapter 21. Library for working with strings
21.1. Basic functions for working with strings
21.2. Functions for working with templates
String.find function
String.match function
String.gsub function
String.gmatch function
21.3. Templates
21.4. Grips
21.5. Substitutions
URL encoding
Replacing tabs
21.6. Tricky tricks
21.7. Unicode
Exercises
Chapter 22. Library I / O
22.1. Simple I / O Model
22.2. Full I / O model
A small trick to increase performance
Binaries
22.3. Other operations with files
Exercises
Chapter 23. Library of operating room
functions
systems
23.1. Date and time
23.2. Other system calls
Exercises
Chapter 24. Debug Library
24.1. Accessibility (introspection)
Accessing Local Variables
Access to non-local variables
Access to other coroutines
24.2. Hooks
24.3. Profiling
Exercises
PART IV
WITH API
Chapter 25. Overview of the C API
25.1. First example
25.2. Stack
Putting items on the stack
Referring to items
Other stack operations
25.3. Error handling in the C API
Handling errors in the application code
Error handling in the library code
Exercises
Chapter 26. Extending Your Application
26.1. Basics
26.2. Working with tables
26.3. Lua function calls
26.4. Generalized function call
Exercises
Chapter 27. Calling C from Lua
27.1. Functions on C
27.2. Continuations
27.3. C modules
Exercises
Chapter 28. Techniques for writing functions
in C
28.1. Working with arrays
28.2. Working with strings
28.3. Saving state in functions on C
Register
Function related values
Function related values used
several functions
Exercises
Chapter 29. User-Defined Types in C
29.1. User data (userdata)
29.2. Metatables
29.3. Object Oriented Access
29.4. Access as an ordinary array
29.5. Light objects of type userdata (light userdata)
Exercises
Chapter 30. Resource Management
30.1. Directory iterator
30.2. XML Parser
Exercises
Chapter 31. Threads and States
31.1. Numerous threads
31.2. Lua States
Exercises
Chapter 32. Memory Management
32.1. Memory allocation function
32.2. Garbage collector
Garbage collector API
Exercises
INTRODUCTION
When Waldemar, Louis, and I started developing Lua in 1993, we
could hardly imagine that Lua would spread like that. On- started as
home language for two specific projects, now Lua is widely used in
all areas one can get
benefits from simple, extensible, portable and efficient scripting
language such as embedded systems, mobile devices swarms and,
of course, games. We designed Lua from the beginning to integrate
with software software written in C / C ++ and other common
strange languages. There are many benefits to this integration. Lua
is a tiny and simple language, partly because it doesn't tries to do
what C is already good at, such as speed,
low-level operations and interaction with third-party programs
parties. Lua relies on C for these tasks. Lua offers something for
which C is not good enough: sufficient distance from the hardware
go support, dynamic structures, no redundancy and ease of testing
and debugging. For these purposes, Lua has safe environment,
automatic memory management and good possibilities for working
with strings and other types
resizable data. Some of Lua's strength comes from its libraries. And
this is no coincidence. In the end Finally, one of the main strengths
of Lua is extensibility. Many language features contribute to this.
Dynamic typing tion provides a large degree of polymorphism.
Automatic memory management simplifies interfaces because there
is no need to the ability to decide who is responsible for allocating
and freeing memory or how to handle overflows. Higher-order
functions and anonymous functions allow a high degree of
parameterization, making functions more versatile.
More than an extensible language, Lua is a “ glue vayushim ”(glue)
language . Lua supports a component-based approach to software
development when we create an application
by gluing together existing high-level components. These
components are written in a compiled language with a static typing
such as C / C ++; Lua is the glue we use use to arrange and
connect these components. Usually components (or objects)
represent more specific low- tier entities (such as widgets and data
structures), which which hardly change during the development of
the program and which take up the bulk of the final program
execution time. Lua gives the final form to the application, which is
most likely changes a lot during the life of a given software product.
However, unlike other "glue" technologies, Lua is is a complete
programming language. Therefore we can use Lua not only to "glue"
components, but also to adaptation and customization of these
components, as well as to create a floor new components. Of
course, Lua isn't the only scripting language. Exists other languages
you can use for roughly the same goals. Nevertheless, Lua provides
a whole set of possibilities, which make him the best choice for
many tasks and gives him your unique profile:

• Extensibility . Lua's extensibility is so great that many consider Lua


not as a language, but as a set for DSL structures (domain-specific
language, a language created for specific area, application). We
developed Lua from the beginning so that it is extensible both
through code on Lua as well as through C code. How the Lua proof
implementsmost of its basic functionality via external library.
Interaction with C / C ++ really simple and Lua has been
successfully integrated with many others languages such as Fortran,
Java, Smalltalk, Ada, C #, and even with scripting languages like Perl
and Python.

• Simplicity . Lua is a simple and small language. It is founded on a


small number of concepts. This simplicity makes it easier to study
nie. Lua contributes to its very small size. Floor- distribution kit
(source code, manual, binaries ly for some platforms) is quietly
placed on one floppy disk.

• Efficiency . Lua has a very efficient implementation tions.


Independent tests show that Lua is one of the most most fast
languages among scripting languages.

• Portability . When we talk about portability, we say Rome on


running Lua on all platforms you are only talking about heard: all
versions of Unix and Windows, PlayStation, Xbox, Mac OS X and iOS,
Android, Kindle Fire, NOOK, Haiku, QUALCOMM Brew, big servers
from IBM, RISC OS, Symbian OS, process Sora Rabbit, Raspberry Pi,
Arduino and more. Original the code for each of these platforms is
almost the same. Lua does not use conditional compilation to adapt
its code for different machines, instead it keeps standard ANSI (ISO)
C. Thus, you usually do not you need to adapt it to the new
environment: if you have a com- piler with ANSI C, then you just
need to compile Lua.

The audience
Lua users generally fall into one of three broad groups: those who
use Lua already built into the application, those who use use Lua
separately from any application (standalone), and those who use
Lua and C together. Many people use Lua built into some application,
like Adobe Lightroom, Nmap, or World of Warcraft. These pri-
applications use the Lua-C API to register new functions, creating
new types and changing the behavior of some operations language
by configuring Lua for its area. Often users are whom applications
don't even know that Lua is an independent language, adapted for
the given area. For example, many developers Lightroom plugins are
unaware of other uses of this language; Nmap users generally view
Lua as scripting Nmap language; World of Warcraft players can view
Lua as a language exclusively for this game.
Lua is also useful as just an independent language, not only for word
processing and one-time small programs, but also for a variety of
medium to large sized projects. For the In this way, the main
functionality of Lua comes from its libraries. Standard libraries, for
example, provide basic new functionality for working with templates
and other functions for working with strings. As Lua improves its
support libraries, a large number of external packages appeared. Lua
Rocks, a system for building and managing modules for Lua, now
has over 150 packages. Finally, there are programmers who use Lua
as a library flow for C. Such people write more in C than in Lua,
although they need requires a good understanding of Lua to create
interfaces that are simple, easy to use and well integrated tied with
the tongue.
This book can be useful to all of these people. The first part covers
the tongue itself, showing how the whole its potential. We focus on
various language constructs and use numerous examples and
exercises to show
know how to use them for practical tasks. Some chap- this part
covers basic concepts such as managing structures, while the rest of
the chapters cover more advanced tricky topics like iterators and
coroutines.
The second part is completely devoted to tables, the only structure
data tour in Lua. The chapters in this part discuss data structures,
persistence, packages and object-oriented programming. It is there
that we will show the full power of language. The third part
introduces the standard libraries. This part especially useful for those
who use Lua on their own language, although many applications
include part or all standard libraries. In this part, each library is
dedicated separate chapter: math library, bitwise library, library for
working with tables, library for working with strings mi, I / O library,
operating system library and debug library. Finally, the last part of
the book covers the API between Lua and C.
This section is markedly different from the rest of the book. In this
part we will be programming in C, not Lua. For some, this part may
be uninteresting, but for someone - on the contrary, the most useful
part of the book.

Running examples
You will need a Lua interpreter to run the examples from this books.
Ideally, you should use Lua 5.2, however most in the examples will
work on Lua 5.1 without any changes. The Lua site (
http://www.lua.org ) stores all the source code for interpreter. If you
have a C compiler and know how compile the C code on your
computer, you better ask try to install Lua from source; it's really
easy. The Lua Binaries site (look for luabinaries) already offers
compiled native interpreters for all major platforms. If you using
Linux or another UNIX-like system, you can check the repository of
your distribution; many distributions already offer ready-made
packages with Lua. For Windows, a good choice is rum is Lua for
Windows (look for luaforwindows), which is a convenient set for
working with Lua. It includes interpreting torus, integrated editor
and many libraries.
If you are using Lua embedded in an application like WoW or Nmap,
then you may need a manual for this. placement (or the help of a
"local guru") in order to understand, how to run your programs.
Nevertheless, Lua remains all the same the same language; most of
the examples we will look at in this book are applicable regardless of
how you use Lua. But I recommend that you start learning Lua with
an interpreter to run you examples.
Part I
I am the language

CHAPTER 1
Begin
Continuing the tradition, our first Lua program simply printed em
“Hello World” :
print (“Hello World”) If you are using a separate Lua interpreter, then all
you need is you need to run your first program - this is to run the
interpreter tator - usually called lua or lua5.2 - with the name of the
text file containing your program. If you saved the above the above
program in hello.lua file , then you should run
following command:

% lua hello.lua

As a more complex example, our next program defines There is a


function for calculating the factorial of a given number, asking gives
the user a number and prints its factorial:

- defines a factorial function

function fact (n)


if n == 0 then
return 1
else
return n * fact (n-1)
end
end
print (“enter a number:”)
a = io.read (“* n”) - reads a number
print (fact (a))

1.1. Blocks
Every piece of code that Lua executes, such as a file or from- a
smart string in interactive mode is called a chunk. A block is simply a
sequence of commands (or statements). Lua does not need a
separator between consecutive operators, but you can use semicolon
if you like. I personally use I use a semicolon only to separate
statements written in one line. Line splitting does not play any role
in the syntax system Lua; so, the following four blocks are valid and
equivalent:

a=1
b=a*2
a = 1;
b = a * 2;
a = 1; b = a * 2
a = 1 b = a * 2 - ugly, but valid

A block can consist of just one statement, as in the example "Hello


World", or consist of a set of operators and definitions functions
(which are actually just assignments, as we will see later), as in the
factorial example. Block can be as great as you want. Since Lua is
also used as language for describing data, blocks of several
megabytes are not a rarity. The Lua interpreter does not have any
problems with bot with large blocks.
Instead of writing your programs to a file, you can run the
interpreter interactively. If you run- those lua without arguments,
then you will see its prompt for input:

% lua
Lua 5.2 Copyright (C) 1994-2012 Lua.org, PUC-Rio
>

Accordingly, each command that you enter (like, for example


measure, print “Hello World” ) is executed immediately after how you
enter it. To exit the interpreter, just type end-of-file character ( ctrl-D
in UNI, ctrl-Z in Windows) or call the exit function from the operating
system library - you need type os.exit () .
In interactive mode, Lua usually interprets each the line you enter as
a separate block. However, if he is detects that the line is not a
complete block, then it waits continue typing until a complete block
is obtained. This way you can enter multi-line definitions, so as a
factiorial function , directly interactively. One- but it is usually more
convenient to place such definitions to a file and then call Lua to
execute that file. You can use the –i option to force Lua switch to
interactive mode after executing the given block ka:

% lua -i prog

A command like this will execute the block in the prog file and then
go into interactive mode. This is especially useful for debugging and
manual th testing. At the end of this chapter, we will look at other
options. command line for the Lua interpreter. Another way to
trigger blocks is the dofile function , which paradise executes the file
immediately. For example, let's say you have lib1.lua file with the
following code:

function norm (x, y)


return (x ^ 2 + y ^ 2) ^ 0.5
end
function twice (x)
return 2 * x
end

Then interactively you can type

> dofile (“lib1.lua”) - load your library


> n = norm (3.4, 1.0)
> print (twice (n)) -> 7.0880180586677

The dofile function is also useful when you are testing a piece of
code. You can work with two windows: one contains the text editor
with your program (for example, in the prog.lua file ), and in other
gom is a console running the Lua interpreter in the inter- active
mode. After you have saved the changes to your program, you do
dofile (“prog.lua”) in the console to load ki new code; then you can
start using the new code, calling functions and printing the results.

1.2. Some lexical agreements


Identifiers (or names) in Lua are strings from Latin their letters,
numbers and underscores that do not start with a number;

eg:

ij i10 _ij
aSomewhatLongName _INPUT

You are better off avoiding identifiers consisting of underscores vana


followed by capital Latin letters (for example, _VERSION ); they are
reserved for special purposes in Lua. I usually use id _ (single
underscore)
for dummy variables. In older versions of Lua, the concept of what a
letter is depended on from the locale. However, these letters make
your program un- suitable to run on systems that do not support this
locale. Therefore, Lua 5.2 considers only letters as letters. from the
following ranges: AZ and az . The following words are reserved, you
cannot use them as identifiers:

and break do
else elseif
end false goto for function
if in
local nil not
or repeat return then true
until while

Lua is case sensitive: and is a reserved word, however, And and AND
are two different identifiers. The comment starts with two minus
signs ( - ) and continues with- until the end of the line. Lua also
supports block comments, which starts with - [[ and goes to the next
]] 1 . Standard the way to comment out a piece of code is to put it
between
- [[ and -]] as shown below:
- [[
print (10) - no action (commented out)
-]]

To make this code active again, just add one minus to the first line:

--- [[
print (10) -> 10
-]]

In the first example - [[ in the first line starts a block com- mentary,
and the double minus in the last line is also in this comment. In the
second example --- [ starts the usual single line comment, so the first
and last lines
become regular independent comments. In this case print is outside
of comments.
1.3. Global Variables
Global variables do not need descriptions; you just use them you
whine. It is not an error to refer to uninitialized variable; you just get
nil as a result- that:

print (b) -> nil


b = 10
print (b) -> 10

If you assign nil to a global variable, Lua will itself as if this variable
has never been used:

b = nil
print (b) -> nil

After this assignment, Lua may eventually regain its password. the
space occupied by this variable.

1.4. Separate interpreter


Stand-alone interpreter (also called lua.c in relation to the name of its
source file or just lua by name executable file) is a small program
that allows direct use of Lua. This section presents her basic options.
When the interpreter loads a file, it skips the first string if it starts
with '#' character . This allows you to use make Lua a scripting
interpreter on UNIX systems. If you start your script with something
like

#! / usr / local / bin / lua

(assuming the interpreter is in / usr / local / bin ) or

#! / usr / bin / env lua ,


then you can directly run your script without explicitly start the Lua
interpreter. The interpreter is called like this:

lua [options] [script [args]]

All parameters are optional. As we have seen, when we start If lua


has no arguments, it goes into interactive mode.
The -e option allows you to directly specify the code directly in the
command- line like below:

% lua -e “print (math.sin (12))” -> -0.53657291800043

(UNIX requires double quotes so that the command interpreter the


torus (shell) did not parse parentheses).
The –l option loads the library. As we have seen previously, -i pe-
puts the interpreter into interactive mode after processing the OS
arguments. So the next call will load the library lioteku lib , then
execute the assignment x = 10 and finally pass into interactive mode.

% lua -i -llib -e “x = 10”

Interactively, you can print the value of the expression by simply


typing a line that starts with an equal sign for
followed by the expression:
> = math.sin (3) -> 0.14112000805987
> a = 30
> = a -> 30

This feature allows Lua to be used as a calculator. Before executing


its arguments, the interpreter looks for re- environment variable
named LUA_INIT_5_2 or, if such a change no, no, LUA_INIT . If one of
these variables is present and its has the form @filename , the
interpreter launches this file. If LUA_INIT_5_2 (or LUA_INIT ) is defined
but not start- is started with the '@' character , then the interpreter
assumes that it contains executable Lua code and executes it.
LUA_INIT gives huge the ability to configure the interpreter, since
when configuration, all the power of Lua is available to us. We can
download packages, change the current path, define your own
functions change, rename or delete functions, etc. The script can get
its arguments in a global variable
arg . If we have a call like % lua script abc , then the interpreter creates
arg table with all command line arguments before by executing the
script. The script name is located at index 0, per- the first argument
(in the example it is “a” ) is located at index 1, and so on. The
preceding options are arranged in negative indices,
as they appear before the script name. For example, ra- look at the
following call:

% lua -e “sin = math.sin” script ab

The interpreter collects arguments as follows:

arg [-3] = "lua"


arg [-2] = “-e”
arg [-1] = “sin = math.sin”
arg [0] = "script"
arg [1] = “a”
arg [2] = “b”

Most often the script uses only positive indices (in the example,
these are arg [1] and arg [2] ).
Since Lua 5.1 the script can also receive its arguments using the
expression ... (three dots). In the main part of the script, this is
expression gives all the arguments of the script (we will discuss
similar expressions (see section 5.2).

Exercises
Exercise 1.1 . Run the factorial example. What will happen
with your program if you enter a negative number?
Modify the example to avoid this problem.

Exercise 1.2 . Run the twice example by loading once


file using the –l option , and another time using dofile . what
faster?

Exercise 1.3 . Can you name another language using-


(-) for comments?

Exercise 1.4 . Which of the following lines are valid


by our identifiers?
___ _end End end until? nil NULL

Exercise 1.5 . Write a simple script that prints


your name without knowing it in advance.

CHAPTER 2
Types and values
Lua is a dynamically typed language. The language has no
definitions of ty-pov, each value carries its own type.
There are eight basic types in Lua: nil , boolean , number , string ,
userdata , function , thread and table . The type function returns the
type for any passed value:

print (type (“Hello world”))


-> string
print (type (10.4 * 3))
-> number
print (type (print))
-> function
print (type (type))
-> function
print (type (true))
-> boolean
print (type (nil))
-> nil
print (type (type (X)))
-> string

The last line will always return string regardless of the value Niya
the X , as the result of a function type is always a string.
Variables have no predefined types; any variable can contain values
of any type:

print (type (a)) -> nil ('a' not yet defined)


a = 10
print (type (a)) -> number
a = “a string !!”
print (type (a)) -> string
a = print
-- Yes it is possible!
a (type (a))
-> function

Notice the last two lines: functions are first class values in Lua; they
can be manipulated like any other values. (More on this in Chapter
6.) Usually when you use the same variable for value different types,
you get disgusting code. However, sometimes judicious use of this
opportunity is beneficial, for example using nil to distinguish normal
return value from any error.

2.1. Nil
Nil is a type with only one value, nil , the main which is different
from all other values. Lua
uses nil to indicate a missing value. Like us already seen, globals
default to nil before its first assignment, you can also assign nil a
global variable to delete it.

2.2. Boolean (boolean values)


The boolean type has two values, true and false , which serve to
pre- setting traditional logical values. However, these values do not
monopolize all conditional values: in Lua, any value can represent a
condition. Relevant checks (checking conditions in various control
structures) interpret both nil and false as false and all other values
as valid muddy. In particular, Lua treats zero and an empty string as
true. in logical conditions. Throughout the book, false will mean nil.
and false . In the case when it is about boolean values, there will be
explicitly set to false .

2.3. Numbers
The number type represents floating point values specified with
double precision. Lua does not have a built-in integer type.
Some fear that even simple operations such as increase by one
(increment) and comparison, may be incorrect work with floating
point numbers. However, in fact it isnot this way. Almost all
platforms now support the standard IEEE 754 for floating point
representation. According to this standard, the only possible source
of errors is There is a case where the number cannot be accurately
represented. Opera- walkie-talkie rounds its result only if the result
cannot be accurately represented as the corresponding float value
point. Any operation whose result can be accurately predicted put,
will have the exact meaning. In fact, any integer up to 2 53
(approximately 10 16 ) has an exact floating point representation
with double precision. When you use a float value double-precision
dot to represent integers, no rounding errors unless the value is
greater than 2 53 in absolute value . In particular, Lua is capable of
representing any 32-bit integer values without rounding problems.
Of course, fractional numbers will have rounding problems. This the
situation is no different than when you have paper and a pen. If we
want to write 1/7 in decimal form, then we must somewhere us stop.
If we use ten digits to represent number, then 1/7 becomes
0.142857142 . If we calculate 1/7 * 7 s ten digits, we get 0.999999994 ,
which is different from 1. Moreover, numbers that have a finite
representation in the form
decimal fractions can have an infinite representation in the form
binary fractions. So, 12.7-20 + 7.3 is not zero, since both numbers 12.7
and 7.3 do not have an exact binary representation (see
Figure 2.3). Before we continue, remember that integers have an
exact representation and therefore have no rounding errors. Most
modern CPUs perform floating operations. dot as fast (or even
faster) than with integers. However, it is easy to compile Lua so that
for numeric values a different type was used, for example long
integers single-precision floating-point values or numbers. It
especially useful for platforms without hardware support for numbers
with floating point such as embedded systems. For de- For this, refer
to the luaconf.h file in the Lua source files. We can write numbers, if
necessary, specifying a fraction part and decimal degree. Examples
of valid numeric constants are:

4 0.4 4.57e-3 0.3e12 5E + 20

Moreover, we can also use hexadecimal constants starting at 0x .


Since Lua 5.2 hexadecimal constants can also have a fractional part
Discovering Diverse Content Through
Random Scribd Documents
Vallflickan och rövaren.
Saga för Snövit av Alfred Smedberg.

ångt, långt inne i djupa skogen låg ett gammalt slott. Egentligen
var det bara ruinerna av ett slott, för det var så gammalt och
förfallet, att ingen människa hade kunnat bo i det på mer än
hundra år. Då kan man veta, hur skröpligt det var.
I forna tider hade slottet dock varit en ståtlig riddarborg med torn och
vallgravar, praktfulla salar, sovkamrar och gemak. Och då hade
väggarna genljudit av glada röster från riddare, lansknektar, svenner
och väpnare. I de vackra gemaken sutto adliga damer och stickade på
väggbonader och riddarrustningar med silke och guldtråd. Ystra gossar
och väna flickor sprungo lekande omkring i parken där utanför, unga
kammartärnor dukade fram kostliga rätter på silverfat, och vid portarna
till borgen stodo harneskklädda slottsknektar på vakt.
Men så kommo fienderna in i landet. De dödade eller förjagade
invånarna, skövlade planteringarna och brände slottet. Och eftersom
ingen människa längre tog vård om den förstörda parken, växte vilda
skogen så småningom ända fram till de nedrasade murarna.
Bland dessa kvarstod emellertid ännu ett torn med tjocka murar och
skottgluggar här och där. Då nu ingen ägare till slottet längre fanns i
livet, och ingen annan människa kunde trivas där, tog en elak rövare
sin boning i det övergivna tornet.
Rövaren var grym och förvildad. Han roffade till sig mat och penningar,
guld, silver och andra dyrbarheter, var och när han kunde komma i
tillfälle därtill. En lång tid var han en skräck för folket i orten, och ingen
vågade nalkas tornet, där han bodde. Det skulle heller inte varit så lätt
att driva bort honom, för tornet hade starka järndörrar, som han alltid
höll väl tillbommade, och från skottgluggarna kunde han skjuta ihjäl
var och en, som kom i närheten.
Ingen visste, vad rövaren hette, och ingen hade någonsin talat med
honom. Men folk hade ofta sett honom, när han tidigt om morgonen
kom hem från sina rövarfärder och med de stulna skatterna smög sig
genom skogen till sin boning i slottstornet.
Bortom skogen låg en betesmark, och om somrarna gick där en ung
flicka och vallade får. Hon hette Helfrid och var en snäll och godhjärtad
flicka, glad och flitig i arbete och trogen i vården om sin lilla hjord. Hon
råkade en gång falla i rövarens klor, och huru det gick till samt huru
hon blev räddad, därom skola vi nu berätta.
En sommarafton satt Helfrid på en tuva i beteshagen och stickade på
en strumpa, allt under det hon noga gav akt på fåren. Det gällde att
särskilt se efter de späda lammen, så att intet av dem sprang bort och
förvillade sig i skogen kring rövarborgen. Medan hon stickade och såg
efter hjorden, sjöng hon sin visa:

»Tussi, tussi, mina


får,
Lika många som i
går.
Lyckan ger
Kanske fler —
Sju i fjol och tolv i år.

Tussi, tussi, lammen


små,
Räven skall er inte få.
Varg och lo,
Hur de sno,
Få sin väg med
skammen gå.
Tussi, tussi, får och
lamm —
Svansen bak och
nosen fram.
Stackars små
Trötta gå,
Men jag är så glad
ändå.»

Rätt som flickan satt där och sjöng, fick hon se en stor, grov och
skäggig karl stå bakom en buske och betrakta henne. Hon såg genast,
att det var rövaren, för hon hade en gång förut sett honom komma ut
ur det gamla tornet och lunka bort genom skogen.
Att den lilla vallflickan kände hjärtat börja bulta av förskräckelse, kan
man inte förundra sig över. Hon förstod mycket väl, att rövaren kom för
att göra henne illa och skövla hennes hjord. Och hur skulle hon, en
svag och värnlös flicka, kunna försvara sig eller fåren mot en stor och
stark karl?
Men så kom hon ihåg, att hon på morgonen anbefallt sig själv och sina
skyddslingar i Guds händer, vilket hon för resten gjorde alla dagar,
såväl morgon som afton. Då blev hon strax lugnare. Och när hon så
ytterligare uppsänt en tyst bön till Gud om hjälp och beskydd, var hon
alldeles säker på, att ingen utan hans vilja skulle kunna göra henne
något ont. Med glatt mod fortfor hon att sjunga:

»Tussi, tussi, mina


får.
Rövaren oss inte når.
Herren är
Alltid när,
Så i dag som sist i
går.»
VAD ÄR DET FÖR FOLK DU HAR OMKRING
DIG? FRÅGADE HAN.
Just som Helfrid sjöng de sista orden, störtade rövaren fram för att
gripa henne. Men då han kommit på tre eller fyra stegs avstånd,
tvärstannade han och stirrade framför sig med vidöppen mun.
— Vad är det för folk du har omkring dig? frågade han häpen.
— Jag har ingen annan omkring mig än mina får, svarade flickan blygt.
— Jo, det står två vitklädda gestalter alldeles bredvid dig, brummade
rövaren.
— Jag ser inte till någon, genmälde flickan förvånad. Finns här några,
så är det väl Guds änglar, kan jag tro.
— Tyst, tyst, nämn inte det namnet, viskade rövaren ängsligt. Har du
alltid de där varelserna i sällskap?
— Det vet jag inte, men det kan allt hända. Ty varje morgon och afton
ber jag Gud om hjälp och beskydd.
— Tyst, säger jag! skrek rövaren förfärad, varpå han tvärt vände flickan
ryggen och sprang in i skogen. Han tålde inte att höra Guds namn.
Nu skyndade han raka vägen till en gammal häxa, som bodde i en
jordhåla bortom skogen.
— God dag, gamla trollpacka! hälsade rövaren.
— God dag igen, ditt leda rövaretroll! svarade häxan.
— Du får allt lov att hjälpa mig i ett bekymmer, sa' rövaren.
— Vad kan det vara för ett bekymmer? sporde häxan.
— Jo, det går en flicka bortom skogen och vallar får. Hon skulle passa
bra till att koka min mat, städa min tornkammare och laga mina
strumpor.
— Nå, så tag henne då! sa' häxan vresigt.

VAD KAN DET VARA FÖR BEKYMMER?


SPORDE HÄXAN.
— Nej, det kan jag inte, för hon har änglavakt omkring sig. Kan du inte
laga så, att den kommer bort?
— Det går inte för sig. Ingen kan jaga bort den vakten mer än flickan
själv.
— Aj, så försmädligt! Hon vill nog inte mista den.
— Nej, det är klart. Men hon kan narras till att handla så, att vakten
överger henne.
— Säjer du det? För all del hjälp mig då!
— Ja, vad vill du ge mig, om jag styr om så, att flickan mister den där
vakten? frågade häxan med ett ondskefullt grin.
— Du skall få en hel skäppa guld, svarade rövaren.
— Nå, kom då hit i morgon med guldet, så ska jag hjälpa dig.
Rövaren blev glad, och följande morgon gick han till häxan med en hel
skäppa guld.
— Det var hederligt av en rövaregubbe, sa' häxan. Här ska du få en
flaska med en trolldryck, som jag kokat ihop åt dig. Om du kan narra
flickan att dricka litet av den, så glömmer hon bort sin Gud. Då upphör
hon också att bedja sina morgon- och aftonböner, och då försvinner
änglavakten.
— Tack ska du ha, gamla trollpacka! sa' rövaren.
— Tack själv, ditt leda åbäke! svarade häxan. Men det var sant. Du
måste vakta flickan mycket väl, så att hon inte kommer nära intill
någon tornglugg, som är vänd mot kyrkan. För om hon får höra
klockorna ringa, så återfår hon sitt minne. Då beder hon till sin Gud,
och då har du inte längre någon makt över henne.
— Var du lugn, grinade rövaren. Jag skall nog vakta henne.
Och så gick han till betesmarken, där Helfrid satt bland sina får och
stickade strumpor. Han började prata med henne så vänligt han kunde,
och så tog han upp sin flaska och drack en klunk. Han var inte rädd för
att glömma Gud, han.
— Man blir så rysligt törstig i den här värmen, sade han. Vill du inte
smaka min goda hallonsaft? Jag skall slå en tår i din mugg, som du har
där bredvid dig.
— Nej, tack, tack! sade Helfrid. Jag har friskt vatten i en källa där borta
i skogskanten.
— Det kan väl vara, smilade rövaren. Men saften är så god, och så
släcker den törsten mycket bättre. Drick du! Det är dig så innerligen väl
unnat.
Och så fyllde han muggen ända till brädden.
Flickan började fundera på saken. Hon kände sig ganska törstig, för det
var tryckande varmt, och rövaren såg nu inte alls elak ut, tyckte hon.
Det vore kanske illa att göra honom förargad med att säga nej till
bjudningen. Hon tog emot den fyllda muggen och förde den till
läpparna.
Då var det som om någon hade viskat i hennes öra:
— Drick inte! Det är synd att göra det, som en ogudaktig människa vill
locka dig till.
Helfrid visste alls inte, att det var hennes skyddsängel, som viskade
detta till henne, ty hon såg inte de båda änglarna. Hon tyckte det var
bara pjåsk och blev nästan lite förargad.
— Vad var det för en dum tanke jag nu fick? sade hon för sig själv. Inte
kan det väl vara någon synd att dricka, när man är törstig, fast det är
en rövare, som bjuder.
Och så smakade hon på trolldrycken. Den var både frisk och söt, och
hon fick en sådan begärelse efter den, att hon tömde muggen ända till
bottnen.
De två änglarna sänkte sina huvuden i sorg. De hade inte kunnat
hindra flickan från att dricka, eftersom hon själv ville det. De hade
endast fått makt att beskydda henne för faror utifrån, så länge hon
vandrade på Guds vägar.
— Tack så mycket för den rara drycken! sade Helfrid, i det hon räckte
fram sin hand och neg för rövaren.
— Väl bekommet! nickade denne och gick sin väg med en belåten
grymtning.
Men hade Helfrid vetat, hur farlig den drycken var, så hade hon nog
aldrig smakat den. Nu gick det som häxan hade sagt. Flickan förlorade
på en gång minnet av Gud och alla hans varningar och budord, löften
och välgärningar. Från den stunden hon druckit av trolldrycken, kom
hon inte längre ihåg, att hon hade en fader i himmelen. Det var som
om hon aldrig hört talas om honom. Hon blev i andliga ting lika
okunnig som en hedning.

HON TÖMDE MUGGEN ÄNDA TILL BOTTNEN.


Den kvällen gick Helfrid till sängs utan någon bön till Gud. Hur skulle
hon också kunna bedja till den, som hon inte längre kände till? På
morgonen blev det likaså. Hon steg upp och klädde sig samt gick till
betesmarken med sina får alldeles som vanligt. Men någon morgonbön
kom inte ifråga, eftersom hon glömt bort, att det fanns en Gud.
Frampå dagen kom rövaren för att ta reda på, om trolldrycken hade
haft någon verkan. Han uppgav ett glädjerop, då han fick se, att de två
änglarna voro borta. Som en tiger störtade han fram, grep flickan om
livet och släpade henne med sig till det gamla slottstornet i skogen.
Ja, det var verkligen inte roligt för lilla Helfrid. Hon brast i gråt och vred
sina händer i förtvivlan, då hon släpades bort och kastades in i den
mörka tornkammaren. Ty fast hon glömt Gud, kom hon likväl ihåg
allting annat. Hon kom ihåg sina föräldrar och syskon, sina får och allt,
som hon fått lära sig i hemmet och i skolan. Det var endast Gud hon
hade glömt.
Hos rövaren fick nu Helfrid utföra de grövsta sysslor som en riktig
slavinna. Dålig mat fick hon, ofta hugg och slag, och det värsta var, att
hon natt och dag hölls innestängd i tornet som en eländig fånge. Hade
hon blott kunnat bedja till Gud, skulle detta ha varit henne till stor hjälp
och tröst. Men det kunde hon ju inte, eftersom hon icke längre visste
om någon Gud. Nu kunde hon bara gråta.
Man kan begripa, att det blev oro i hemmet, då Helfrid på kvällen inte
kom hem med fåren, som hon alltid brukade göra. Hennes äldsta bror
gick på natten till betesmarken och fann fåren stå i en klunga, modlösa
och tätt ihopkrupna, men flickan såg han icke till.
Följande dagen gingo alla ut i skogen och letade. Det höllo de på med
dag efter dag en hel veckas tid, men något spår efter flickan kunde
icke upptäckas. Då förstodo alla, att hon fallit i rövarens händer.
Ja, hur skulle man nu bära sig åt? Att befria Helfrid ur fångenskapen i
tornet kunde inte gå på något annat sätt än genom att bryta upp
järndörrarna, och därtill behövdes mycket folk. Ty komme blott några
få, skulle rövaren skjuta ihjäl dem genom gluggarna på tornet.
Flickans fader gav sig därför ut i bygden för att skaffa hjälp. Under
tiden smög sig brodern bort till tornet, där han ställde sig utmed
väggen för att lyssna. Han hoppades möjligen få höra något ljud ifrån
sin syster. Efter en stund fick han höra henne sjunga med en sorgsen
och klagande röst. Sången avbröts ofta av gråt och snyftningar, och
han kunde blott urskilja följande ord:

»Tussi, tussi mina


får!
Dagen tung och
natten svår.
Aldrig mer
Ser jag er.
Stackars den, som
vilse går!»

När Helfrid slutat sjunga, ropade brodern sakta hennes namn. Hon
spratt till och skyndade till torngluggen för att lyssna. Brodern
berättade nu, att deras far snart skulle komma med mycket folk och
taga henne ut ur tornet. Helfrid darrade av glad överraskning. Hon
vågade dock inte tala till brodern, för då kunde rövaren upptäcka
honom. Men hon kunde sjunga det hon ville säga honom. Sången
brydde sig nämligen rövaren inte om att lyssna på. Och så sjöng hon:

»Sorgsna rop från


skogen höras,
Vem är det, som
klagar så?»

Brodern svarade:

»Ropen, som med


vinden föras,
Gå från lammen dina
små.»

Helfrid väntade ängsligt på, att den utlovade hjälpen skulle komma,
och så fortsatte hon att sjunga:

»Hjärtat bultar
ideligen,
Ser du ingen komma
än?»

Brodern svarade:

»Kvällen skymmer,
mörk är
stigen.
Ingen, ingen ser jag
än.»

Men nu hade rövaren äntligen begripit, att någon talade med flickan.
Han rusade fram och ryckte henne ifrån torngluggen.
— Släpp mig! ropade Helfrid gråtande. Far kommer snart med mycket
folk och räddar mig härifrån.
— Ha, är det på det viset! skrek rövaren ursinnig. Då är jag dödens
man, men då skall du också dö.
Och så släpade han flickan med sig uppför en trappa till en glugg, som
var så vid, att man kunde komma ut genom den. Helfrid grät och
ropade än en gång till brodern där utanför:

»Räven släpar mig till


döden.
Ser du ingen komma
än?»

HAN SLÄPPTE FLICKAN OCH TUMLADE


BAKLÄNGES.
Brodern svarade:

»Jo, nu får du hjälp i


nöden.
Se, här kommer
hundra män.»

Så var det också. En stor folkskara skyndade fram ur skogen och


angrep tornporten med klubbor, släggor och järnspett. Rövaren hörde
bullret och förstod, att hans sista stund var kommen. Han grep flickan
om livet för att kasta henne ut genom torngluggen.
Då började i detsamma kyrkklockorna ringa till helgsmål, ty det var en
lördagsafton. Så snart Helfrid hörde klockorna, återfick hon minnet av
Gud. I ångesten knäppte hon händerna och ropade:
— Käre Herre Gud, hjälp mig, fräls mig från rövaren och döden!
Vid dessa ord blev rövaren likblek i ansiktet. Han släppte flickan och
tumlade baklänges.
— Ve mig, ve mig! utbrast han förfärad. Flickan har återfått minnet av
den, som jag inte vill nämna. Hon har åkallat honom, och nu stå de två
änglarna åter vid hennes sida. Jag är förlorad.
I det samma hördes ett brak från den inslagna järnporten, och folket
rusade uppför trappan. Rövaren tog ett språng och kastade sig ut
genom torngluggen samt slog ihjäl sig mot stenarna på marken där
utanför. Med fröjd och glädjerop fördes flickan hem, och från den
dagen hade man aldrig ont av rövaren i det gamla slottstornet.
Illustratör: Einar Torsslow.
Birgittas juldröm.
För Snövit av Gewe.

en fröjdefulla julkvällen var tillända.


Ingen hade kunnat glädja sig mer än lilla Birgitta. Den
disharmoni, som ofta gjorde sig kännbar inom familjen Kruse,
hade man enats om att denna afton utestänga. Den tolvåriga Birgitta
hade för en gång känt sig fullt lycklig och så glad, som det endast
förunnas ett barn att vara.
Hennes föräldrar, baron Kruses, bebodde en stor, något avsides
liggande egendom, där de förde ett gästfritt hus. Vänner och bekanta
anlände och reste åter i en oavbruten följd.
I detta hem, fullt av omväxling, fanns dock en, vilken bar
ensamhetskänslan i hjärtat. Det var lilla Birgitta. Hennes inre
harmonierade ingalunda med det rörliga livet omkring henne. Mest
berodde detta kanske på, att hon vanligen saknade jämnårigas
sällskap, en brist, som heller aldrig gjordes något för att avhjälpa.
Hennes båda systrar voro betydligt äldre än hon själv, och med syskons
självtagna och ofta despotiska rätt sköto de den yngsta systern åt
sidan och läto henne alltid veta, att hon var i vägen, om hon någon
gång sökte deras sällskap.
Modern kanske icke lade märke till detta, i allt fall låtsades hon vara
omedveten om, att icke allt var, som det borde vara, med lilla Birgittas
ställning inom hemmet.
Själv sjuklig och nervös, hade hon aldrig i nämnvärd grad tagit sig an
sina barn, och särskilt gällde detta yngsta dottern.
Strax efter födelsen hade Birgitta lämnats i en tjänarinnas vård.
Mor Karin var änka och måste för sin utkomst söka sig en plats. Med
glädje mottog hon anbudet att på eget ansvar vårda lilla Birgitta. En
plikt, som hon också samvetsgrant uppfyllde.
Så småningom gjorde mor Karin sig oumbärlig i det Kruseska hemmet.
Följden blev, att hon där kom att kvarstanna, även sedan Birgitta icke
längre direkt behövde hennes vård.
Mor Karin var Birgittas bästa vän, och barnet visste intet bättre än att
få vara tillsammans med henne.
Ingen kunde berätta så vackra sagor eller förtälja så mycket av intresse
som mor Karin. En tacksammare åhörare än Birgitta kunde hon icke
önska sig. Nu särskilt tiden före jul hade hon berättat om allt det
myckna övernaturliga, som tilldrager sig under julnatten.
Bland mycket annat hade mor Karin förtäljt om, huru djuren i
ladugården den natten mellan 12-1 erhålla förmågan att liksom
människor samtala med varandra. Ingen borde då störa dem, hade hon
sagt, ty de skulle unnas ro den enda timme på året, som en mild
försyn givit dem talförmåga. Dessutom var det förenat med en stor risk
att just då under »spöktimmen» beträda ladugården.

EN TACKSAMMARE ÅHÖRARE KUNDE HON


INTE TÄNKA SIG.
Denna berättelse hade gjort ett så djupt intryck på Birgitta, att tanken
därpå icke lämnat henne ro varken dag eller natt.
Att det var sant, tvivlade hon icke ett ögonblick på. Mor Karin, som var
så klok och visste allting mycket bättre än andra, måste ju också veta
detta. — — — —
Julafton, Birgittas gladaste dag på året, är som nämnts tillända. Birgitta
har sagt godnatt till föräldrar och syskon och befinner sig på sitt eget
lilla rum, tillsagd att gå till vila.
Det lilla huvudet är emellertid fullt av funderingar, och först och sist
tänker hon på, att snart är den förunderliga timme inne, då djuren
börja tala. Visserligen har mor Karin sagt, att de på inga villkor få
störas, men tänk, om hon likväl skulle våga smyga sig ditut i den
stjärnklara natten. Mörkrädd är hon då alls icke, och om hon går på tå
riktigt tyst och försiktigt, kanske de aldrig ens komma att märka henne.
Om de likväl få syn på henne, kunna de ändå omöjligt bli onda, ty hon
är ju så god vän med dem och brukar dagligen besöka ladugården.
Att komma obemärkt ut genom husets stora port skall nog gå ganska
lätt, ty Birgitta är van att öppna och stänga den.
Precis klockan tolv skall hon smyga sig ut. Visst är hon nu litet sömnig,
men det gör ingenting. Hon kan gärna krypa upp i soffhörnet och vila
en stund, medan hon väntar på tolvslaget. Nu har hon det riktigt
bekvämt. Pappa brukar säga, att om man blott vill vakna på ett
bestämt klockslag, så gör man det också. Nog vill Birgitta det alltid, och
sin lilla klocka håller hon hårt sluten i handen.
— — — — Så där ja. Vart har tiden tagit vägen? Tornurets tolvslag
ljuda redan genom det stora huset. Nu är tiden inne. Det känns litet
kusligt, men Birgitta vill icke avstå från sitt beslut.
Så i ett nu befinner hon sig i sin fars stora ladugård, och det utan alla
besvär.
Birgitta står alldeles nere vid dörren, och hon trycker sig så hårt hon
kan intill väggen. Vad hon ser, kommer henne att på en gång fröjdas
och förskräckas. Ett starkt ljussken, ett sådant hon aldrig förr skådat,
möter hennes blick, och hon måste skugga med handen för ögonen för
att ej alldeles bländas. Det tyckes henne, som om ljuskällan vore i
själva himmelen, ja, hon har en förnimmelse av att själv befinna sig
där. Hon vet, att detta är fars ladugård, och likväl ser hon nu icke vare
sig väggar eller tak. Rummet är icke mer begränsat, och det tyckes
Birgitta, som om det vore gjort av renaste guld.
Djuren finnas där alla. Hon känner dem var och en, och dock äro de sig
så olika. De stå på sina gamla platser, men inga tunga kedjor hindra
dem nu mer från att röra sig, som de själva behaga. O, vad de äro
vackra! Skönast av dem alla strålar dock Birgittas älsklingskossa
»Solöga».
Nu ville Birgitta smyga sig bort. Hon tror icke, att någon märkt hennes
närvaro. Då vänder sig plötsligt »Solöga» mot henne. Birgitta börjar att
darra och skälva i hela sin lilla kropp. Månne hon nu skall få bannor!
Men hon har ju ej alls menat illa, och »Solöga» har hon alltid tyckt så
mycket om. Birgitta står som fastvuxen och kan icke röra sig eller fly,
som hon ämnat. Då höres »Solöga» tala: »Du goda, älskliga barn, som
vågat dig ensam hit denna tid på dygnet, som de dumma människorna
kalla »spöktimmen», du skall veta, att välsignelse städse skall följa
dina spår, ty du har ett hjärta, som ömmar och blöder för alla värnlösa.
Du vill icke skada någon utav oss. Jag minns din lena, mjuka hand,
med vilken du strök mig och gav mig lindring, när den grymma
drängen nyligen slagit mig. Fortsätt att vara god mot alla varelser, som
äro i människans våld. Du skall icke göra det förgäves. Lycka och
välsignelse skola följa dina spår.

DÅ VÄNDER SIG PLÖTSLIGT SOLÖGA MOT


HENNE.
En hemlighet vill jag också uppenbara för dig. Något som icke
människorna förstå. Just därför att de äro grymma och orättvisa mot
oss värnlösa varelser, har Gud förhärdat deras hjärtan och låtit dem i
sin förblindelse vända sig mot varandra. Därför rasar nu det allt
förhärjande världskriget. Kom ihåg att säga dem, att för varje handling,
som av kärlek göres mot oss arma över vilka de råda, minskas i någon
mån deras skuldregister, och möjlighet gives, att Gud åter kan
förbarma sig över jordens folk och låta dem känna den länge saknade
freden.»— — — — —
— Birgitta vakna! höres mor Karins röst i dörren, det är tid att stiga
upp, om Birgitta vill hinna bli färdig att åka med till julottan. Men vad
tänker mitt kära barn på? Här ligger hon fullt påklädd på soffan i stället
för att vila i sin mjuka bädd, och därtill har hon lampan brinnande och
ställd så, att skenet faller mitt i hennes ögon.
Birgitta berättar i all hast sin dröm för den uppmärksamt lyssnande
mor Karin. Sedan dröjer det icke länge, innan hon är färdig att resa till
julottan.
När Birgitta sedan sitter i det rikt upplysta templet och stämmer in med
församlingen i den sköna julpsalmen, lever hon på nytt i tankarna om
sitt drömda besök i fars ladugård.
En så högtidlig julmorgon, tycker hon sig aldrig förr ha upplevat, och
den underbara drömmen bevarar Birgitta alltjämt i trogen hågkomst.
Illustratör: Nils Kjellberg.
Mormors kängor.
Berättelse för Snövit av Alfred Smedberg.

illa Malin satt ihopkrupen på den oklädda träsoffan bredvid


fönstret, och hon var mycket förtretad. Ja, hon var så ond, att
hon skulle kunnat sparka och slå den där stora och drumliga
gossen, som hade burit sig så skamligt åt mot hennes snälla mormor.
Det ryckte i mungiporna, och hon var nära att brista i gråt.
Malin var i sitt åttonde år och hade nyss fått lära sig läsa. Hennes
mamma hade dött några år förut, och då hade hon fått komma till sina
morföräldrar, som bodde i en liten nätt och trevlig stuga bredvid
landsvägen. Där fick hon lära sig allt, som var nyttigt och gott, för både
morfadern och mormodern voro kunniga, snälla och gudfruktiga
människor. Malin var också en mycket snäll och läraktig flicka, som
strävade efter att på alla sätt vara de gamla morföräldrarna till glädje
och trevnad.
Men nu var hon som sagt riktigt ond, och det var inte så alldeles utan,
att hon hade sina goda skäl därtill. Vi skola i det följande berätta om de
tilldragelser, som gjorde henne så förtretad.
Det hände sig en dag frampå senhösten, att en fattig torparpojke kom
in i stugan till de gamla och bad att få värma sina fötter. Han hade så
trasiga skor och strumpor, att nakna tårna stucko ut, och så var det ett
förskräckligt snöslask ute på vägarna. Pojken hade varit i handelsboden
och gått och pölat i det djupa snöslasket, så att skor och strumpor voro
alldeles genomsura och tårna röda som en tuppkam.
Den snälla gumman drog genast skorna av pojken, tvättade, gned och
värmde hans rödfrusna fötter och lät honom ta på sig ett par torra och
varma strumpor, medan hans egna torkades framför brasan i spisen.
Gubben tog de trasiga skorna och tittade på dem. Han var skicklig i
litet av varje, den gamle hedersmannen, och hade i sin ungdom även
fått lära sig göra skor, fast han egentligen var jordbrukare till yrket.
— Jag skulle allt kunna laga de här skorna, så att inte tårna krypa ut
och gå sin väg, sade han med ett småleende. Om du vill sitta här en
stund, min käre Kalle, så kan du få med dig dem både hela och torra,
när du går hem.
Ja, det hade pojken ingenting emot, och så fick han låna gummans nya
kängor att ha på fötterna, medan han satt där och väntade.
Vardagsskorna hade gumman själv på sig, så det var hennes
kyrkkängor han fick låna.
Med lagningen gick det emellertid långsammare än gubben hade tänkt,
för när han en gång åtagit sig arbetet, ville han göra det riktigt
ordentligt med både tåhättor, halvsulning och klackning. Skorna kunde
därför inte bli färdiga förrän på kvällen, och Kalle ville inte vänta, tills
det blev mörkt. Han fick gå hem i gummans nya kängor. Hon hade
visserligen ett ögonblick tänkt på, att låta honom få ta sina vardagsskor
i stället, för att kängorna inte skulle bli sura och otrevliga. Men så
tyckte hon, att snöslasket var alldeles för djupt. Det skulle säkert ha
gått över de låga skorna.

JAG SKULLE ALLT KUNNA LAGA DE HÄR


SKORNA, SADE HAN.
— Men jag är rädd om mina kängor, sa' gumman, så du får gå hit igen
med dem i morgon bittida. Då får du dina lagade skor i stället.
Ja, det lovade pojken förstås, och så gick han utan att säga tack för
den hjälp han fått.
— Mormor! sade lilla Malin förvånad. Har inte Kalle fått lära sig tacka,
när han får något?
— Nej, det är nog det ledsammaste med många av barnen från de allra
fattigaste hemmen, att de inte lärt sig vara tacksamma, svarade
gumman. Därför ha de ingen välsignelse av det de få, och så bli de allt
fattigare och fattigare.
— Bli de fattiga därför, att de inte tacka, när de få något?
— Ja, otacksamheten har ofta det straffet med sig. Den som är
tacksam mot Gud och hjälpsamma människor behöver aldrig råka i
någon verklig fattigdom, såvida han annars är arbetsam och ordentlig.
— Jag tänker, han tackar väl, när han kommer tillbaka med kängorna
och får se, hur fina och vackra morfar har gjort hans trasiga skor, sade
Malin förtröstansfullt.
Men den som inte kom tillbaka, det var allt pojken. Gumman väntade
förgäves den följande dagen och ytterligare tre eller fyra dagar. När då
ingen Kalle hördes av, gick gubben själv till torpet för att lämna de
lagade skorna och få igen kängorna. Men där träffade han ingen
hemma utan fick återvända med oförrättat ärende.
Ytterligare en vecka gick — det gick två, ja det gick tre, och ingen
pojke hördes av. Gumman kunde inte komma till kyrkan, eftersom hon
ingenting annat hade på fötterna än sina låga vardagsskor. Hon blev
tvungen att ge sig av till torpet för att höra efter sina kängor. Då var
folket hemma, men munsjör Kalle var ute på sina strövtåg och hade
naturligtvis kängorna på sig.
— Ja, se han fick lov te' gå ett ärende, sade torparhustrun, men i
morron ska han få gå tebaks med kängorna, nu se'n han fått sina skor
lagade.
— De ha legat färdiga där hemma nära en hel månad, upplyste
gumman, och vi ha väntat på Kalle varenda dag.
— Jaså, ha ni det? Ja, i morron ska han komma.
— Har han gått med mina kängor, alltse'n han fick låna dem?
— Nej, visst inte! Han har haft träskorna i slasket. Men nu fick han ta
kängorna, för det var lång väg, och så var det torrt på marken.
Gumman gick hem ganska missbelåten, men hon hade inte hjärta att
banna upp torparhustrun för deras försumlighet och slarv.
Följande dagen kom Kalle och lämnade igen de lånade kängorna. De
voro nu så smutsiga, slitna och illa medfarna, att man inte kunde
känna igen dem. Men gossen sprang sin väg så hastigt, att ingen i
stugan hann säga något åt honom.
Gumman blev så ledsen över att ha fått sina bästa skor fördärvade, att
hon nära på ville gråta. Kängorna måste nu både lappas och halvsulas,
innan hon kunde begagna dem.
Det var då Malin blev så ond. Hon höll innerligt av sin snälla mormor,
och när hon såg, hur usla kängorna voro och hur ledsen gumman var,
och när hon av allt som hänt kunde förstå, hur illa pojken hade lönat
de gamlas godhet mot honom, knöt hon sin lilla näve i förbittring.
— En så'n pojke, en så'n otäck pojke! fräste hon. Han skall ha stryk, ja,
han skulle ha stryk i åtta dar.
— Nej, kära barn! sade gumman allvarsamt. Så får du inte tala. Gossen
har inte förstått bättre, och vi böra förlåta honom.

EN SÅ'N OTÄCK POJKE! FRÄSTE HON.


— Ja, men, mormor, så skamligt som han har burit sig åt.
— Det har han visst gjort, men det har han mesta skadan av själv,
stackars gosse! Om vi inte förlåta honom, så kunna vi inte bedja vår
aftonbön i kväll.
— Varför inte, mormor?
— Jo, därför att om vi icke förlåta dem, som gjort oss emot, så kan vår
himmelske Fader icke heller förlåta oss våra många och stora synder.
Det har Jesus själv sagt, och han talade alltid sanning. Du minns väl,
vad som står i femte bönen av Fader vår?
— Ja, sade Malin. »Förlåt oss våra skulder, såsom ock vi förlåta dem
oss skyldiga äro!»
— Så står det, ja, och det är Herren Jesus, som lärt oss bedja så. Han
vill inte, att vi skola gå och vara onda på någon av våra medmänniskor,
för alla ha vi syndat mycket mer emot Gud, än någon människa kan ha
syndat emot oss.
Malin teg, men vreden satt i alla fall kvar i hjärtat. Hon tyckte, att Kalle
hade handlat så illa mot hennes snälla mormor, att man inte gärna
kunde förlåta honom.
När hon på aftonen skulle krypa ner i sin bädd, ville mormodern, att
hon utom den vanliga aftonbönen även skulle läsa Herrens bön. Malin
knäppte händerna och läste bönen, tills hon kom till orden: »såsom ock
vi förlåta dem oss skyldige äro». Då stannade hon tvärt och började
om igen. Men när hon för andra gången kom till de nämnda orden,
stannade hon på nytt, och så brast hon i gråt. Hon kände, att hon inte
av hjärtat kunde förlåta den slarvige gossen, och då förstod hon, att
Gud inte kunde vara nöjd med hennes bön.
Mormodern, som mycket väl förstod, hur det var fatt, ville nu inte säga
något åt flickan. Hon tyckte det var bäst att låta henne själv i
ensamheten få tänka över, vad som blivit talat förut under dagen.
Några veckor förgingo, och så var det julafton. Malin hade nu hunnit
alldeles glömma bort den ledsamma händelsen med mormors kängor,
då hon helt plötsligt blev påmind därom.
Kalles mor kom nämligen på morgonen in i stugan till de gamla och
berättade med tårar i ögonen, att Kalle i fjorton dagar legat sjuk och
blivit sämre för var dag.
Malin kom genast ihåg händelsen med kängorna, och den gamla
vreden, som för länge sedan var glömd, blossade nu hastigt upp igen.
— Det är rätt åt honom, tänkte hon. Men hon vågade inte säga det
högt.
Mormodern tycktes emellertid ha gissat hennes tankar, ty när kvinnan
gått sin väg, frågade hon Malin, om hon ville följa med upp till torpet
och se, hur de hade det där.
Ja, det ville Malin, och så gjorde de båda sällskap till det fattiga
skogstorpet. Där såg armt och eländigt ut, inte det minsta julfint såsom
hemma hos morföräldrarna, och inte heller syntes där vara tillagad
något slags mat till den stundande högtiden. Kalle låg med ett trasigt
lapptäcke över sig och föreföll alldeles utmagrad av sjukdom, vanvård
och svält.
— Det värsta är, klagade torparkvinnan, att vi inte kunna ge honom
den mat, han längtar efter. Se vi ha ingenting annat än grovt bröd och
sill och potatis, och det rår han inte med, så sjuk och klen som han är.
— Vad längtar han då efter? frågade Malins mormor.
— Jo, han säger, han skulle kunna äta, om han finge honungssmörgås.
Men var ska vi ta honung ifrån, när det ingen finns att få här i trakten?
Och för resten ha vi intet att köpa för.
Malin ryckte sin mormor i kjorteln och såg menande på henne.
— Ja, ja, viskade gumman, jag förstår dig, barn lilla! Vi ska tala om det
sedan.
Så fort de kommit ut ur stugan, började Malin med största iver tigga
och be för den sjuke gossen.
— Snälla mormor! sade hon och blickade bönfallande upp i gummans
ansikte. Vi ha ju lite honung, som morfar fick ur bikupan i höstas. Och
så ha vi vetebullar och julskinka och julost och mycket annat gott och
rart. Skulle vi inte kunna ge Kalle lite sådan mat, som han tycker om
och kan äta?
— Jo, det ska vi visst göra, svarade gumman, som blev mycket glad
över Malins förändrade sinnelag mot gossen. Är du nu inte längre ond
på Kalle?
— Nej, inte alls, mormor. Jag tycker det är så stor synd om honom nu.
— Skulle du vilja gå dit en gång till i dag?
— O, ja, det vill jag så gärna, så gärna.

SE HÄR, OCH SE HÄR! ROPADE HON IVRIGT.


Sedan de kommit hem, fyllde mormodern en korg med åtskillig god
julmat, varibland även fanns en kopp med honung. Malin lade
dessutom i korgen ett halvt tjog av de äpplen, hon fått på hösten, och
som hon sparat och gömt för att hänga i julgranen. Så ilade hon av
upp till skogstorpet med sin matkorg, som för hennes små krafter blev
en rätt försvarlig börda.
Pustande och röd om kinden inträdde Malin i det fattiga torparhemmet
och ställde sin korg på en stol bredvid Kalles säng.
— Se här, och se här, och se här! ropade hon ivrigt, i det hon radade
upp på bordet de saker hon haft med sig.
Kalles bleka, avtärda ansikte livades av en märkbar rodnad, när han
fick se äpplen och vetebullar. Och då han sedan fick en skiva mjukt
vetebröd med honung på, kom det glans i de förut så matta ögonen.
Han åt med strykande matlust ett par stycken dylika smörgåsar och
fick sedan till efterrätt ett saftigt och välsmakande alexanderäpple.
— Tack ska du ha, Malin lilla! sade han med en hjärtlighet, som han
förut aldrig förstått att visa. Det var rysligt snällt, att du kom hit med
allt det goda, du hade i korgen. Nu blir jag snart frisk, ska du få se.
Hälsa och tacka din snälla mormor så rysligt mycket!
Malin var nära att ge till ett utrop av glad överraskning. Tänk, att Kalle
hade lärt sig tacka! Det var då för innerligen roligt. Nu skulle han
säkert få Guds välsignelse och inte längre bli så fattig och eländig, som
de otacksamma få vara.
I jublande språng ilade Malin hem för att tala om, hur glad och
tacksam Kalle var, samt för att hjälpa till med att pynta julgranen, som
morfar huggit och burit hem från skogen. Hon hade nu visserligen inte
kvar mer än hälften av sina äpplen att hänga i den, men det var lika
roligt i alla fall.
Det blev för lilla Malin den gladaste jul hon upplevat, åtminstone sedan
hennes mamma gått bort. Hon var glad över att ha fått hjälpa den
stackars sjuke gossen och över att denne gosse blivit snäll och lärt sig
att vara tacksam. Men allra mest gladde hon sig över att ha sluppit
ifrån den stygga vrede, hon hyst emot Kalle för hans vårdslöshet med
mormors kängor. Nu skulle hon åter av hjärtat kunna bedja den femte
bönen i Fader vår: »Förlåt oss våra skulder, såsom ock vi förlåta dem
oss skyldiga äro!»
Illustratör: Alfr. Frijs.
En fridsstiftare.
För Snövit av Arvid Ohlsson.

årdarna lågo där uppe på var sitt backkrön — rödmålade och


vitrandade — lika varandra som två bär. Emellan de båda
familjerna hade alltid rått ett enastående gott förhållande. Man
kunde i sanning säga, att de delade både ljuvt och lett med varandra.
De hjälptes åt i arbetet, de gingo över till varandra på lediga stunder,
de turades om med både kyrkskjuts, mjölkskjuts och kvarnskjuts.
Båten vid sjön var byggd för att bära båda familjerna, och den vackra
bersån på bergssluttningen hade de hjälpts åt att plantera och
möblera. Där drucko de gemensamt kaffe på både födelse- och
namnsdagar, där lästes postillan, och där höllos symöten på sommaren.
Där hade de en avskild vrå undan slit och släp, och många
gemensamma högtidsstunder hade de där haft. När vintern kom,
stormen ven och kölden gnistrade, hade båda familjerna stora, goda
sättugnar med sprakande brasor att samlas omkring, och
julaftonsbordet med alla dess godsaker dukades aldrig mer än i ena
hemmet. Även då turades de om.
Försynen hade tilldelat dem allt så besynnerligt lika. Troed Jönsson
hade visserligen en pojke och Mårten Olsson en flicka, men inte
avundades de varandra för det. Kanske låg där mening bakom.
Gårdarna voro ju bara åttingar och kunde gott brukas som en fjärding,
och hur det är, så blir ju ändå blodet tjockare än vattnet. I skolan höllo
barnen jämna steg liksom på vägen dit och hem. Det var riktigt vackert
att möta dessa båda, då de hand i hand småpratande eller sjungande
sprungo mot skolan. Mårtens Malena var ett år äldre än Troeds Torkel,
och så var han ju starka modiga pojken, och alltid kände Malena sig
trygg både mot hornbaggar och glävsande hundar, och Torkel ville visa
sig modig för Malena, om han ock var rädd själv, så att benen ville vika
sig.
Så en vårdag kom Troed helt oförmodat hem med en vaktgosse, eller
kanske han kunde kallas en liten dräng. Det skulle Troed aldrig ha gjort
utan att först rådfrågat Mårten.
— Jaså! sa' denne för sig själv. Börjar du nu på den trallen. Är nu
pojken din för god att vakta och göra grovsysslor? Kanske skall han i
glasskåp och visas för pengar. Då är han inte värd att hålla min flicka i
handen längre. En ann är lika god som en ann.— —
Anställandet av en vallgosse gav upphovet till en fnurra på
vänskapstråden, som fort nog övergick till en knut. Vågskålarna mellan
familjerna vägde inte jämt längre.
Men Troed hade sannerligen inga sådana undermeningar, då han
stadde lille Johan. Denne var ett sockenbarn, som år från år skuffats
från gård till gård.

SÅ EN VÅRDAG KOM TROED HEM


MED EN VAKTGOSSE.
Det var på konfirmationsdagen, och nu var han sin egen. Socknen
hade gjort sitt. Johan såg så övergiven och sorgsen ut, där han en
stund på kyrkogården — ett stycke nedåt bland gröna gravkullar —
dröjde för sig själv. Alla hans kamrater fångades vid kyrkdörren av
anhörigas varma blickar och kärleksfulla händer. Ingen hade en vänlig
tanke eller ett gott ord till honom. Troed, som varit med på förhöret,
råkade iakttaga Johan och tyckte sådan synd om honom. Det var som
om någon viskat i hans inre: »Det I gören en av dessa mina minsta,
det gören I ock mig».
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy