2016-12-10 3 views
0

Например, я могу создать массив, содержащий функцию.Как добавить функцию к массиву?

julia> a(x) = x + 1 
>> a (generic function with 1 method) 

julia> [a] 
>> 1-element Array{#a,1}: 
    a 

Но я не могу показаться, чтобы добавить функцию в пустой массив:

julia> append!([],a) 

>> ERROR: MethodError: no method matching length(::#a) 
    Closest candidates are: 
    length(::SimpleVector) at essentials.jl:168 
    length(::Base.MethodList) at reflection.jl:256 
    length(::MethodTable) at reflection.jl:322 
    ... 
    in _append!(::Array{Any,1}, ::Base.HasLength, ::Function) at .\collections.jl:25 
    in append!(::Array{Any,1}, ::Function) at .\collections.jl:21 

Что я ulimately хочу сделать, это сохранить заранее определенные функции, так что я в конечном итоге может отобразить их более ценность. Например .:

x = 0.0 

for each fn in vec 
    x = x + fn(x)  
end 
+5

Второй параметр [ '' Append] (Http: //docs.julialang. org/en/release-0.5/stdlib/collections /? highlight = append # Base.append!) - это коллекция. Вы можете использовать 'push! ([], A)' для отдельных элементов или 'append! ([], [A])' для коллекции – Gomiero

ответ

4

append! для добавления одной коллекции к другой. Вы ищете push!, чтобы добавить элемент в коллекцию.

Ваш код должен быть push!([], a)

Смотрите документацию:

julia>?append! 

search: append! 

append!(collection, collection2) -> collection. 

Add the elements of collection2 to the end of collection. 

julia> append!([1],[2,3]) 
3-element Array{Int64,1}: 
1 
2 
3 

julia> append!([1, 2, 3], [4, 5, 6]) 
6-element Array{Int64,1}: 
1 
2 
3 
4 
5 
6 

Use push! to add individual items to collection which are not already themselves in another collection. The result is of the preceding example is equivalent to push!([1, 2, 3], 4, 5, 6). 

против:

julia>?push! 

search: push! pushdisplay 

push!(collection, items...) -> collection 

Insert one or more items at the end of collection. 

julia> push!([1, 2, 3], 4, 5, 6) 
6-element Array{Int64,1}: 
1 
2 
3 
4 
5 
6 

Use append! to add all the elements of another collection to collection. The result of the preceding example is equivalent to append!([1, 2, 3], [4, 5, 6]).