
# ------------------------------------------------------------------------------------------
# # 软件包
#
# Julia 有超过 2000 个登记在案的包，这使得第三方的软件包成为 Julia 语言生态的重要组成部分。
# 尽管如此，软件包生态依然有很大的成长空间。
#
# 值得一提的是，在 Julia 中调用其它语言的函数也是一等公民。Julia 提供了很棒的外部函数接口（FFI）。
# 我们可以很容易地通过 `PyCall` 或 `Rcall` 调用 Python 或 R。
# 这意味着你不必等到 Julia 的生态完全成熟就能迁移现有项目到 Julia，
# 而且迁移到 Julia 并不意味着放弃你在其他语言中惯用的包或者库！
#
# 查看全部可获得的包，请看
# https://pkg.julialang.org/
# 或者
# https://juliaobserver.com/
#
# 现在我们先学习一下该如何使用包。
# ------------------------------------------------------------------------------------------

# ------------------------------------------------------------------------------------------
# 在安装好的 Julia 中第一次要使用一个包的时候，你需要用包管理器（package manager）明确添加（add）它：
# ------------------------------------------------------------------------------------------

using Pkg
Pkg.add("Example")

# ------------------------------------------------------------------------------------------
# 之后每次使用 Julia 时（比如打开一个新的 REPL 会话或者第一次打开一个 notebook），
# 你需要通过 `using` 关键字载入要用的包
# ------------------------------------------------------------------------------------------

using Example

# ------------------------------------------------------------------------------------------
# 在 `Example.jl` 的源码
# https://github.com/JuliaLang/Example.jl/blob/master/src/Example.jl
# 中我们可以看到声明了下面这个函数
#
# ```julia
# hello(who::String) = "Hello, $who"
# ```
#
# 载入了 `Example` 我们现在应该可以调用 `hello` 函数了
# ------------------------------------------------------------------------------------------

hello("it's me. I was wondering if after all these years you'd like to meet.")

# ------------------------------------------------------------------------------------------
# 现在让我们来玩 `Colors` 包吧
# ------------------------------------------------------------------------------------------

Pkg.add("Colors")

using Colors

# ------------------------------------------------------------------------------------------
# 首先创建一个 100 个不同颜色的调色板
# ------------------------------------------------------------------------------------------

palette = distinguishable_colors(100)

# ------------------------------------------------------------------------------------------
# 然后通过 `rand` 函数来创建随机矩阵
# ------------------------------------------------------------------------------------------

rand(3, 3)

rand(1:10, 3, 3)

rand(palette, 3, 3)
