.get refuses to work on associative array

H. S. Teoh hsteoh at quickfur.ath.cx
Wed Apr 15 22:09:32 UTC 2020


On Wed, Apr 15, 2020 at 09:46:58PM +0000, p.shkadzko via Digitalmars-d-learn wrote:
> I am quite confused by the following exception during dub build:
> 
> > dub build --single demo.d --compiler=ldc2 --force
> Performing "debug" build using ldc2 for x86_64.
> demo ~master: building configuration "application"...
> demo.d(221,20): Error: template object.get cannot deduce function from
> argument types !()(double[string], string, string), candidates are:
> C:\ldc2-1.20.0-windows-x64\bin\..\import\object.d(2645,10):        get(K,
> V)(inout(V[K]) aa, K key, lazy inout(V) defaultValue)
> C:\ldc2-1.20.0-windows-x64\bin\..\import\object.d(2652,10):        get(K,
> V)(inout(V[K])* aa, K key, lazy inout(V) defaultValue)
> 
> The code that causes it:
> 
> """
> void main(string[] args) {
> 
>     double[string] scores = calculateScores("test.txt");
>     double score = scores.get("hello", 0.0); // <-- exception
> }
> """
> 
> It works if I just do "double score = scores["hello"];"
> Both dmd and ldc2 throw this exception.
> Is it a bug?

Are you sure the error is on the line you indicated? The error message
claims that your argument types are (double[string], string, string),
but your code clearly has argument types (double[sting], string,
double).  Are you sure dub is compiling the source file(s) you think
it's compiling?  Which source file(s) are shown by `dub -v`?


T

-- 
Leather is waterproof.  Ever see a cow with an umbrella?


More information about the Digitalmars-d-learn mailing list