1

我正在使用 Julia,我尝试测试一个创建图像并根据给定字符串分配红色值的函数。听到这句话,我敢肯定你能想到我可以做一百万件事来接收错误消息,但是这个错误:

在此处输入图像描述

在第 13 行生成。

这是第 13 行:

r = (i + 64*rand(0:3) - 1)/255

那只是数学!r 是我正在分配的一个新变量。i 是数组中每个字符的索引。这似乎在控制台中有效,因此之前的代码中可能发生了一些奇怪的事情,只是没有被捕获。这是整个功能:

function generate(string, width)
  img = rand(RGB,width,floor(Int,length(string)/width) + 1)
  for n in 1:length(string)
    i = indexin(string[n], alphabet)
    r = (i + 64*rand(0:3) - 1)/255
    g = img[n].g
    b = img[n].b
    img[n] = RBG(r,g,b)
  end
  return img
end

有谁知道这个错误信息是什么意思,或者我做错了什么?

4

1 回答 1

5

i这里不是一个整数,它是一个数组。indexin用于在另一个数组中查找每个元素的位置;只找到一个你可能想要的元素findfirst

julia> findfirst(isequal('c'), collect("abcde"))
3

julia> indexin(collect("cab"), collect("abcde"))
3-element Vector{Union{Nothing, Int64}}:
 3
 1
 2

julia> indexin('c', collect("abcde"))
0-dimensional Array{Union{Nothing, Int64}, 0}:
3

nothing另请注意,如果他们找不到这封信,这两个都会给出,您可能想决定如何处理。(可能与if else,您也可以使用功能something。)

julia> indexin('z', collect("abcde"))
0-dimensional Array{Union{Nothing, Int64}, 0}:
nothing

julia> findfirst(isequal('z'), collect("abcde")) === nothing
true

最后,请注意,像这样索引字符串不是很健壮,您可能需要对其进行迭代:

julia> "cañon"[4]
ERROR: StringIndexError: invalid index [4], valid nearby indices [3]=>'ñ', [5]=>'o'

julia> for (n, char) in enumerate("cañon")
       @show n, char
       end
(n, char) = (1, 'c')
(n, char) = (2, 'a')
(n, char) = (3, 'ñ')
(n, char) = (4, 'o')
(n, char) = (5, 'n')
于 2021-07-12T04:58:37.707 回答