# On beauty of Distributions.jl pdf interface

**URL:** <https://discourse.julialang.org/t/on-beauty-of-distributions-jl-pdf-interface/67895>\
**Category:** General Usage\
**Tags:** syntax, design, community, distributions, probability\
**Created:** [September 8, 2021, 7:58pm UTC](https://discourse.julialang.org/t/on-beauty-of-distributions-jl-pdf-interface/67895 "2021-09-08T19:58:02Z")\
**Posts on this page:** 1\
**Page:** 2

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [September 14, 2021, 11:18am UTC](https://discourse.julialang.org/t/on-beauty-of-distributions-jl-pdf-interface/67895/24 "2021-09-14T11:18:51Z")

</div>

I don’t think it’s a good idea to rely on a global variable that you will ‘mostly’ use. Using `eval`, too, in a context like this seems ill-advised.

What about something like this:

```julia
jl> pdf_X(X::Distribution{Univariate, Discrete}) = OffsetArray(pdf(X), -1);

jl> f_X = pdf_X(DiscreteUniform());

jl> f_X[0]
0.5

jl> f_X[0:1]
2-element Vector{Float64}:
 0.5
 0.5

jl> f_X[:]
2-element OffsetArray(::Vector{Float64}, 0:1) with eltype Float64 with indices 0:1:
 0.5
 0.5

```

?

```julia
# My method:
jl> @btime $f_X[$0]
  1.100 ns (0 allocations: 0 bytes)
0.5

# your method
jl> @btime $f_X($0)
  194.167 ns (3 allocations: 144 bytes)
0.5

```

[Previous page](https://discourse.julialang.org/t/on-beauty-of-distributions-jl-pdf-interface/67895.md?page=1)
