Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 嵌套dict中的无意义方法错误?_Dictionary_Error Handling_Nested_Julia - Fatal编程技术网

Dictionary 嵌套dict中的无意义方法错误?

Dictionary 嵌套dict中的无意义方法错误?,dictionary,error-handling,nested,julia,Dictionary,Error Handling,Nested,Julia,在将一个程序从python翻译成julia时,我偶然发现了这个错误,对此我无法理解。下面是该片段的简化: a = Dict() for x in 1:3 a[x] = Dict((x,) => 1//1) #the keys of the nested dicts must all be tuples println("Insert numbers for "$(x)": ") for y in 1:3 while !(haskey(a[x],(y,

在将一个程序从python翻译成julia时,我偶然发现了这个错误,对此我无法理解。下面是该片段的简化:

a = Dict()
for x in 1:3
   a[x] = Dict((x,) => 1//1)     #the keys of the nested dicts must all be tuples
   println("Insert numbers for "$(x)": ")
   for y in 1:3
       while !(haskey(a[x],(y,)))
           print("$((y,)): ")
           a[x][y] = rationalize(convert(Float64,eval(parse(readline(STDIN)))))
       end
   end
end
当我运行此命令时,我得到:

ERROR: MethodError: `convert` has no method matching convert(::Type{Tuple{Int64}}, ::Int64)
这对我来说似乎是荒谬的,因为我没有将int转换成tuple,而是将数值转换成有理数,然后将其分配给恰好是tuple的键。
此行为的原因是什么?

尝试将y Int64转换为元组类型时出错

您可以将其改为y:

更改此行后,执行将提供以下输出:

Insert numbers for 1:
(2,): 2.3
(3,): 4//5
Insert numbers for 2:
(1,): 9/7
(3,): 3.141592653
Insert numbers for 3:
(1,): 3.33333
(2,): 2
并在代码末尾添加一个dumpa,输出:

Dict{Any,Any} len 3
  2: Dict{Tuple{Int64},Rational{Int64}} len 3
    (3,): Rational{Int64}
      num: Int64 199345706
      den: Int64 63453709
    (2,): Rational{Int64}
      num: Int64 1
      den: Int64 1
    (1,): Rational{Int64}
      num: Int64 9
      den: Int64 7
  3: Dict{Tuple{Int64},Rational{Int64}} len 3
    (3,): Rational{Int64}
      num: Int64 1
      den: Int64 1
    (2,): Rational{Int64}
      num: Int64 2
      den: Int64 1
    (1,): Rational{Int64}
      num: Int64 333333
      den: Int64 100000
  1: Dict{Tuple{Int64},Rational{Int64}} len 3
    (3,): Rational{Int64}
      num: Int64 4
      den: Int64 5
    (2,): Rational{Int64}
      num: Int64 23
      den: Int64 10
    (1,): Rational{Int64}
      num: Int64 1
      den: Int64 1
还有一件事是第一个println。也许应该是:

println("Insert numbers for $(x): ")

使用Julia版本0.4.3测试时,尝试将y Int64转换为元组类型时出错

您可以将其改为y:

更改此行后,执行将提供以下输出:

Insert numbers for 1:
(2,): 2.3
(3,): 4//5
Insert numbers for 2:
(1,): 9/7
(3,): 3.141592653
Insert numbers for 3:
(1,): 3.33333
(2,): 2
并在代码末尾添加一个dumpa,输出:

Dict{Any,Any} len 3
  2: Dict{Tuple{Int64},Rational{Int64}} len 3
    (3,): Rational{Int64}
      num: Int64 199345706
      den: Int64 63453709
    (2,): Rational{Int64}
      num: Int64 1
      den: Int64 1
    (1,): Rational{Int64}
      num: Int64 9
      den: Int64 7
  3: Dict{Tuple{Int64},Rational{Int64}} len 3
    (3,): Rational{Int64}
      num: Int64 1
      den: Int64 1
    (2,): Rational{Int64}
      num: Int64 2
      den: Int64 1
    (1,): Rational{Int64}
      num: Int64 333333
      den: Int64 100000
  1: Dict{Tuple{Int64},Rational{Int64}} len 3
    (3,): Rational{Int64}
      num: Int64 4
      den: Int64 5
    (2,): Rational{Int64}
      num: Int64 23
      den: Int64 10
    (1,): Rational{Int64}
      num: Int64 1
      den: Int64 1
还有一件事是第一个println。也许应该是:

println("Insert numbers for $(x): ")
使用Julia版本0.4.3进行测试