www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - .get refuses to work on associative array

reply p.shkadzko <p.shkadzko gmail.com> writes:
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?
Apr 15 2020
parent reply "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
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?
Apr 15 2020
next sibling parent bauss <jj_1337 live.dk> writes:
On Wednesday, 15 April 2020 at 22:09:32 UTC, H. S. Teoh wrote:
 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
It also says line 221. In which case he should be able to track it down to line 221 and see where the error is.
Apr 15 2020
prev sibling parent p.shkadzko <p.shkadzko gmail.com> writes:
On Wednesday, 15 April 2020 at 22:09:32 UTC, H. S. Teoh wrote:
 On Wed, Apr 15, 2020 at 09:46:58PM +0000, p.shkadzko via 
 Digitalmars-d-learn wrote:
 [...]
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
I should stop programming at night. Indeed it was the incorrect .get("a", "NULL") instead of .get("a", 0.0), sigh. Sorry guys.
Apr 15 2020