# lastmost

operator

Syntax
```shelf lastmost
```

Purpose

`lastmost` can be used to identify a shelf item to be accessed, wherever an item indexer, `[...]` or key `{...}` can be used. The `lastmost` indexer always accesses the last item on the shelf.

Note that the syntaxes shelf `lastmost` and shelf```[number of ```shelf`]` are identical when used to access an item on a shelf. They behave differently when they are used to set the currently selected item:

• when the shelf is being indexed in a `using` prefix, and
• when the indexed shelf is being passed to a function as a `modifiable`, `read-only`, or `write-only` argument.
In these two cases, when the default item of the shelf or function argument is accessed, the `lastmost` item is recalculated, while `number of` is not. This means that when the default item is set to `lastmost`, it will always be the last item on the shelf, regardless of how the shelf changes.

In this example, which uses `lastmost`,

```  process
local integer c variable

clear c
set new c to 1
using c lastmost
do
output "The value is %d(c)%n"
set new c to 2
output "The value is %d(c)%n"
set new c to 3
output "The value is %d(c)%n"
done
```
the output is:
```  The value is 1
The value is 2
The value is 3
```
However, when the default is set to the last item with `[number of c]`:
```  process
local integer c variable

clear c
set new c to 1
using c [number of c]
do
output "The value is %d(c)%n"
set new c to 2
output "The value is %d(c)%n"
set new c to 3
output "The value is %d(c)%n"
done
```
the output is:
```  The value is 1
The value is 1
The value is 1
```
This is because the number of items on shelf c is just `1`. That becomes the numeric index of the shelf for the duration of `using`.

Note that it cannot be assumed that the lastmost item of a passed shelf is its current item. The following function takes this possibility into account, and the `using` keyword is used to ensure that references to the stream `code-set` refer only to the newly created item.

```  define function
value      string new-codes)
as
using code-set lastmost
do
new code-set
open code-set as buffer
repeat scan new-codes
match letter => one-code
put code-set "%ux(one-code)"

match any
; skip
again
close code-set
done
```

Related Syntax