Skip to content

Commit bb7063d

Browse files
authored
Fix hint on mean(::Number, ::Number) (#131)
1 parent f13706e commit bb7063d

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

src/Statistics.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,16 @@ julia> mean(√, [1 2 3; 4 5 6], dims=2)
103103
"""
104104
mean(f, A::AbstractArray; dims=:) = _mean(f, A, dims)
105105

106+
function mean(f::Number, itr::Number)
107+
f_value = try
108+
f(itr)
109+
catch MethodError
110+
rethrow(ArgumentError("""mean(f, itr) requires a function and an iterable.
111+
Perhaps you meant middle(x, y)?""",))
112+
end
113+
Base.reduce_first(+, f_value)/1
114+
end
115+
106116
"""
107117
mean!(r, v)
108118

test/runtests.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,14 @@ end
171171
@test isnan(@inferred mean(Iterators.filter(x -> true, Int[])))
172172
@test isnan(@inferred mean(Iterators.filter(x -> true, Float32[])))
173173
@test isnan(@inferred mean(Iterators.filter(x -> true, Float64[])))
174+
175+
# using a number as a "function"
176+
@test_throws "ArgumentError: mean(f, itr) requires a function and an iterable.\nPerhaps you meant middle(x, y)" mean(1, 2)
177+
struct T <: Number
178+
x::Int
179+
end
180+
(t::T)(y) = t.x * y
181+
@test @inferred mean(T(2), 3) === 6.0
174182
end
175183

176184
@testset "mean/median for ranges" begin

0 commit comments

Comments
 (0)