返回值 #
一、基本返回值 #
1.1 隐式返回 #
函数返回最后一个表达式的值:
julia
function add(a, b)
a + b
end
result = add(1, 2)
1.2 显式return #
使用return显式返回:
julia
function add(a, b)
return a + b
end
1.3 提前返回 #
julia
function divide(a, b)
b == 0 && return nothing
return a / b
end
divide(10, 2)
divide(10, 0)
1.4 条件返回 #
julia
function classify(x)
x > 0 && return "positive"
x < 0 && return "negative"
return "zero"
end
classify(5)
classify(-3)
classify(0)
二、多返回值 #
2.1 元组返回 #
使用元组返回多个值:
julia
function minmax(arr)
return minimum(arr), maximum(arr)
end
min_val, max_val = minmax([1, 2, 3, 4, 5])
2.2 解构赋值 #
julia
function divide_and_remainder(a, b)
return (div(a, b), a % b)
end
quotient, remainder = divide_and_remainder(10, 3)
2.3 忽略返回值 #
julia
function get_info()
return "Alice", 25, "New York"
end
name, _, city = get_info()
name
city
三、命名元组返回 #
3.1 基本语法 #
julia
function statistics(arr)
return (
count = length(arr),
sum = sum(arr),
mean = sum(arr) / length(arr)
)
end
stats = statistics([1, 2, 3, 4, 5])
stats.count
stats.sum
stats.mean
3.2 解构命名元组 #
julia
function get_user()
return (name="Alice", age=25, city="NYC")
end
(; name, age) = get_user()
name
age
3.3 可读性优势 #
julia
function analyze_text(text)
words = split(text)
return (
word_count = length(words),
char_count = length(text),
avg_word_length = sum(length.(words)) / length(words)
)
end
result = analyze_text("Hello world from Julia")
result.word_count
result.avg_word_length
四、返回类型注解 #
4.1 基本语法 #
julia
function add(a::Int, b::Int)::Int
return a + b
end
function greet(name)::String
return "Hello, $name"
end
4.2 复杂类型 #
julia
function get_stats(arr::Vector{Int})::NamedTuple{(:count, :sum, :mean), Tuple{Int, Int, Float64}}
return (
count = length(arr),
sum = sum(arr),
mean = sum(arr) / length(arr)
)
end
4.3 Union返回类型 #
julia
function safe_divide(a::Float64, b::Float64)::Union{Float64, Nothing}
b == 0 && return nothing
return a / b
end
safe_divide(10.0, 2.0)
safe_divide(10.0, 0.0)
五、Nothing返回 #
5.1 表示无结果 #
julia
function find_index(arr, value)
for (i, x) in enumerate(arr)
x == value && return i
end
return nothing
end
find_index([1, 2, 3], 2)
find_index([1, 2, 3], 5)
5.2 处理Nothing #
julia
result = find_index([1, 2, 3], 2)
if result !== nothing
println("Found at index: $result")
else
println("Not found")
end
5.3 默认值模式 #
julia
function find_or_default(arr, value, default)
result = find_index(arr, value)
return result === nothing ? default : result
end
find_or_default([1, 2, 3], 2, 0)
find_or_default([1, 2, 3], 5, 0)
六、实践练习 #
6.1 练习1:数学运算 #
julia
function quadratic(a, b, c)
Δ = b^2 - 4*a*c
if Δ < 0
return nothing
elseif Δ == 0
x = -b / (2a)
return (x,)
else
x1 = (-b + sqrt(Δ)) / (2a)
x2 = (-b - sqrt(Δ)) / (2a)
return (x1, x2)
end
end
quadratic(1, -5, 6)
quadratic(1, 2, 1)
quadratic(1, 1, 1)
6.2 练习2:文件处理 #
julia
function read_file_info(filename)
try
stat = stat(filename)
return (
exists = true,
size = stat.size,
modified = stat.mtime
)
catch
return (exists = false, size = 0, modified = 0.0)
end
end
read_file_info("existing_file.txt")
read_file_info("nonexistent.txt")
6.3 练习3:解析结果 #
julia
function parse_user_input(input)
parts = split(input, ",")
if length(parts) != 3
return (success = false, error = "Expected 3 fields")
end
try
name = strip(parts[1])
age = parse(Int, strip(parts[2]))
city = strip(parts[3])
return (success = true, name = name, age = age, city = city)
catch e
return (success = false, error = string(e))
end
end
parse_user_input("Alice, 25, NYC")
parse_user_input("Invalid input")
6.4 练习4:缓存函数 #
julia
function memoize(f)
cache = Dict{Tuple, Any}()
function(args...)
key = args
if !haskey(cache, key)
cache[key] = f(args...)
end
return cache[key]
end
end
fib = memoize(function(n)
n <= 1 ? n : fib(n-1) + fib(n-2)
end)
fib(40)
七、总结 #
本章我们学习了:
- 基本返回值:隐式和显式返回
- 多返回值:元组返回和解构
- 命名元组返回:可读性更好的返回值
- 返回类型注解:指定返回类型
- Nothing返回:表示无结果
接下来让我们学习Julia的匿名函数!
最后更新:2026-03-27