• Elixir-Basic types 之 Binaries、strings、charlist


    Unicode and code point

    • is_binary/1 : 判断是否为binary
    • ?a :查看字母a的code point
    • byte_size/1 :查看字符的字节长度
    • 查看字符binary的存储方式
      • 通过拼接null byte <<0>> 的方式
        iex>  "hello" <> <<0>> 
        
        • 1
      • IO.inspect/2函数
        iex> IO.inspect("hełło", binaries: :as_binaries)
        <<104, 101, 197, 130, 197, 130, 111>>
        
        • 1
        • 2

    Bitstring

    • bitstring 是 Elixir 中的基础数据类型之一,
    • 语法格式是: <<>>
    • bitstring格式的数据会作为一个连续序列存储在内存中
      • 默认,8bit(一个字节)用来存储一个数字,用户可以通过 ::n::size(n)方法来声明要用几个字节来表示一个数字
        iex(25)> <<42>>
        "*"
        iex(26)> <<42>> == <<42::8>>
        true
        
        • 1
        • 2
        • 3
        • 4

    Binary

    • 一个Binary是一个由8位组成的 Bitstring 串,这意味着所有的binary都是bitstring,但是反之,并不是所有的bitstring都是binary。

    • is_bitstring/1 :判断是否为bitstring

    • is_binary/1:判断是否为binary

    • binary 和 bitstring 可以使用模式匹配

      iex(1)> <<0, 1, x>> = <<1, 2, 3>>
      ** (MatchError) no match of right hand side value: <<1, 2, 3>>
      
      iex(1)> <<0, 1, x>> = <<0, 1, 3>>
      <<0, 1, 3>>
      iex(2)> x
      3
      iex(3)> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • binary-size(n) 可以匹配 n 个字节,binary模式匹配

      iex(3)> <<head::binary-size(2), rest::binary>> = <<1, 2, 3, 4>>
      <<1, 2, 3, 4>>
      iex(4)> head
      <<1, 2>>
      iex(5)> rest
      <<3, 4>>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • <>,为binary模式匹配

    • <>: head为 utf8 模式匹配,rest 为 binary 模式匹配

      iex(1)> <<head, rest::binary>> = "banana"
      "banana"
      iex(2)> head
      98
      iex(3)> head == "b"
      false
      iex(4)> head == ?b 
      true
      iex(5)> rest
      "anana"
      iex(6)> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

    string

    • String.length/1
    • String.codepoints/1
    • String.graphemes/1

    charlists

    charlist 有2种展现方式,一个是整数list,另外一个是''单引号包裹的字符串;
    charlist 是一个整数的list,list里的整数全部对应着有效的code points。
    ""双引号表示string,chalist literals 用''单引号表示
    一个charlist 包含整数code points,但是在打印时显示的是ASCII 范围内的单引号格式的code points

    iex(21)> [104, 101, 108, 108, 111]
    'hello'
    iex(22)> is_list('hello')
    true
    
    • 1
    • 2
    • 3
    • 4

    将整数按照code point解释,总能让我们发现一些不可思议的行为。举个例子,如果你存储一个整数的list,其中所有的数值都在0-127范围内;iex默认会将这个list解释为一个charlist,并且将会展成对用的ASCII字符
    <> string可以使用 <> 操作符进行拼接,charlist 只能使用 ++ 操作符进行拼接。

  • 相关阅读:
    群晖NAS:通过Docker 部署宝塔面板【注册表:cyberbolt/baota】
    技术干货 | MindSpore AI科学计算系列(五):AI框架加速海洋数值模拟
    java多线程应用场景
    测试域: 流量回放-介绍篇
    C#/VB.NET 将PDF转为PDF/X-1a:2001
    极致cms1:1精仿资源哟源码/资源网系统/下载教程娱乐网源码
    Python实战项目:俄罗斯方块(源码分享)(文章较短,直接上代码)
    黑马程序员spring+springMVC+Maven高级+springboot+MyBatisPlus总结之SpringMvc参数传递
    华为od德科面试数据算法解析 2022-8-29 24按身高和体重排队
    昆明航空x-s3-s4e算法分析
  • 原文地址:https://blog.csdn.net/HobbitHero/article/details/126147028