变量
- Julia允许重新定义内置常量和函数的值,前提是该常量或函数没有被引用过。
- 命名规范
- 变量的名字采用小写。
- 用下划线(
_
)分隔名字中的单词,但是不鼓励使用下划线, 除非在不使用下划线时名字会非常难读。
- 类型(Type)和模块(Module)的名字使用大写字母开头,并且用大写字母 而不是用下划线分隔单词。
- 函数(Function)和宏(Macro)的名字使用小写,不使用下划线。
- 会对输入参数进行更改的函数要使用
!
结尾。这些函数有时叫做 “mutating” 或 “in-place” 函数,因为它们在被调用后,不仅仅会返回一些值 还会更改输入参数的内容。
#### 数值类型
- 字面量和原始数值类型
- 字面量(numeric literal):整数和浮点数在代码中作为立即数(
1.0
,1
的显示表示)时称作数值的字面量。
- 原始数值类型(numeric primitive):数值的内置表示(内存中二进制表示)。
- 无符号整数
0b
/0o
/0x
前缀,以2/8/16进制输入输出。
- 当字面量不是开头全是
0
时,它们二进制数据项的位数会是最少需要的位数。
- 当开头都是
0
时,位数取决于一个字面量需要的最少位数,这里的字面量指的是一个有着同样长度但开头都为1
的数。
- 无符号数前加
-
号,产生补码数。
- 可以用下划线作为数字的分隔符。
julia> 10_000, 0.000_000_005, 0xdead_beef, 0b1011_0010
(10000, 5.0e-9, 0xdeadbeef, 0xb2)
运算符
Dot
操作:每个二元运算符都有一个Dot
运算符对应,.^
与^
对应,将^
广播到数组上。
- 将点运算符用于数值字面量可能会导致歧义。例如,
1.+x
到底是表示1. + x
还是 1 .+ x?
这会令人疑惑。因此不允许使用这种语法,遇到这种情况时,必须明确地用空格消除歧义。
julia> [1,2,3] .^ 3
3-element Array{Int64,1}:
1
8
27
#三者等价
a .^ b
(^).(a,b)
@. a^b
- 特殊数值比较
+0
<=-0
Inf
=Inf
,Inf
大于除了NaN
的所有数
NaN
不等于、不小于且不大于任何数值,包括它自己(用==
时)
isequal(NaN, NaN)
可以返回true
julia> isequal([1 NaN], [1 NaN])
true
julia> isequal(NaN, NaN32)
true
julia> -0.0 == 0.0
true
julia> isequal(-0.0, 0.0)
false
julia> 1 < 2 < 3 != 5
true
注意链式比较的执行顺序:
julia> v(x) = (println(x); x)
v (generic function with 1 method)
julia> v(1) < v(2) <= v(3)
2
1
3
true
julia> v(1) > v(2) <= v(3)
2
1
false
数值转换
复数和有理数
- 全局常量
im
被绑定到复数\(i\)
- 数学函数通常应用于实数就返回实数值,应用于复数就返回复数值。
julia> sqrt(-1)
ERROR: DomainError with -1.0:
sqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x)).
Stacktrace:
[...]
julia> sqrt(-1 + 0im)
0.0 + 1.0im
- 用变量构建复数时,建议用
complex
函数:complex(a, b)=a+b*im