Ruby的国际化这章,对UTF-8终于有了个比较全面的认识。也了解了一下 jcode库。
从 执行数值计算,学到了更多的东西。
数字原来可以这么表示。
1_048_576 # 和 1048576 相同
sprintf也有一个类似的方法。
str = 345.6789 str = sprintf("%5.1f", x) # "345.7" str = "%5.1f" % x # "345.7"
矩阵Matrix。(非标准库NArray很有名)
m = Matrix[[1,2,3],[4,5,6],[7,8,9]]
有理数和复数
x = Rational(1,3) # 1/3 y = Complex(3,5) # 3+5i
使用memoize缓存函数结果,也是非标准库。作者居然在这节实现了一个简单的遗传算法。
require 'memoize' indclude Memoize def zeta(x, y, z) lim = 0.0001 gen = 0 loop do gen += 1 p, q = x + y/2.0, z + y/2.0 x1, y1, z1 = p*p*1.0, 2*p*q*1.0, q*q*0.9 sum = x1 + y1 + z1 x1 /= sum y1 /= sum z1 /= sum delta = [[x1, x], [y1, y], [z1, z]] break if delta.all? {|a, b| (a-b).abs < lim} x, y, z = x1, y1, z1 end gen end g1 = zeta(0.8, 0.1, 0.1) memorize(:zeta) # 存在内存中 g2 = zeta(0.8, 0.1, 0.1) memorize(:zeta, "z.cache") # 存在内文件中 g3 = zeta(0.8, 0.1, 0.1)