What is the 'Result' type even for?
Ali Çehreli
acehreli at yahoo.com
Fri Jan 20 04:46:07 UTC 2023
On 1/19/23 19:11, Ruby The Roobster wrote:
> typeof(c).stringof.writeln;
> The program prints:
>
> ["a", "b", "c", "d", "e"]
> Result
>
> What is the purpose of this 'Result' type?
Just to make sure, 'Result' is what the programmer of a Phobos algorithm
chose to name a struct type. It could be anything.
I will try to demonstrate it by naming my struct 'MyResult' below. The
following range algorithm alternates between the two values it is called
with.
The pragma(msg) inside 'main' prints MyResult.
auto alternate(T)(T a, T b) {
// This function will return an object
// of the following nested struct.
// (Note: This is for demonsration
// purposes only. Yes, this can be
// be more optimal.)
struct MyResult {
bool useB = false;
enum empty = false; // Infinite
T front() {
return useB ? b : a;
}
void popFront() {
// Flip the selector
useB = !useB;
}
}
// Here, an object of the struct is
// returned. It has single member (useB)
// that it uses as a selector.
// The values 'a' and 'b' are the actual
// function arguments.
return MyResult();
}
import std;
void main() {
auto myRange = alternate(42, 7);
// This prints 'MyResult' at compile time
pragma(msg, typeof(myRange));
const expected = [ 42, 7, 42, 7, 42 ];
assert(myRange.take(5).equal(expected));
}
> even when the type
> has the same inherent function:
Different instantiations of templates are distinct types. For example,
if I called 'alternate' with two 'long' values, both alternate!int (as
instantiated by the code above) and alternate!long would have different
MyResult struct types.
Although they would have the same functionality, they would be compiled
potentially with very different CPU instructions and would not be
assignable.
Ali
More information about the Digitalmars-d-learn
mailing list