zoukankan      html  css  js  c++  java
  • ruby api 2.1新增改变

    -> 这个符号可以替换lambda
    %i 生成符号数组 %i(foor bar baz) #[:foo,:bar:baz]
    def 定义方法 eg: def foo(x: 1); puts; end
    hash {a:1,b:2}替换{:a=>1,:b=>2}
    r 数字后面接r表示有理数 1.2r
    Array.try_convert 转换成数组对象
    Array.rotate 通过转动产生数组,将第一个元素放到最后,理解成左轮-手-枪-旋转
    Array.keep_if 删除使代码块结果为false的元素
    Array#sample 选择一个随机元素
    Array#repeated_permutation (n),使用原来数组的元素,组合成数组,数组的元素数是n,然后将这些数组再装入一个数组中返回,元素可以重复使用

    Array#repeated_combination (n),使用原来数组的元素,组合成数组,数组的元素数是n,然后将这些数组再装入一个数组中返回,元素不可以重复使用

    eg:
    a = [1, 2, 3]
    p a.repeated_combination(2).to_a # [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]
    p a.repeated_permutation(2).to_a #[[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]

    Hash#to_h 转换成hash对象
    Hash#default_proc= 当取某个key时不能取到给一个默认值
    Hash#key(value) 通过值得到key
    Hash#keep_if 删除代码块为false的键值对

    Hash#assoc 使用==搜索与给定的key相当的键值对
    Hash#rassoc 使用==搜索与给定的value相当的键值对
    Hash#flatten 将hash变成数组

    Hash#compare_by_identity 让map的key的哈希值作为他们的值的唯一key

    h1 = { "a" => 100, "b" => 200, :c => "c" }
    h1["a"] #=> 100
    h1.compare_by_identity 调用后
    h1.compare_by_identity? #=> true
    h1["a".dup] #=> nil # different objects. 使用a的拷贝取不到了 ,拷贝后的字符串“a”是另一个对象
    h1[:c] #=> "c" # same symbols are all same. 符号总是唯一

    Enumerable#to_h 转换成hash结构
    Enumerable#flat_map 数组每个元素扔进块里计算,计算后返回的如果是数组遍历这个数组每个元素取出来,统一放回一个数组再返回
    [1, 2, 3, 4].flat_map { |e| [e, -e] } #=> [1, -1, 2, -2, 3, -3, 4, -4]
    [[1, 2], [3, 4]].flat_map { |e| e + [100] } #=> [1, 2, 100, 3, 4, 100]


    Enumerable#each_entry 包含yield的语句就是迭代器方法,each_entry调用迭代器 将迭代其中yeild返回的数据,传入给定的代码快计算,如果yeild返回多个数据,这多个数据就是一数组形式传入代码快

    class Foo
    include Enumerable
    def each
    yield 1
    yield 1, 2
    yield
    end
    end
    Foo.new.each_entry{ |o| p o }


    Enumerable#each_with_objec 将每个元素传入代码快计算,返回给定的初始对象

    evens = (1..10).each_with_object([]) { |i, a| a << i*2 }

    #=> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

    Enumerable#chunk 根据代码快结果。来判断每个元素是否放在一起返回

    [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5].chunk { |n|
    n.even?
    }.each { |even, ary|
    p [even, ary]
    }
    #=> [false, [3, 1]]
    # [true, [4]]
    # [false, [1, 5, 9]]
    # [true, [2, 6]]
    # [false, [5, 3, 5]]

    解释上面代码: 3被取出来判断时候是偶数,返回真假,如果是假,even=false,3放到数组里,此时数组是[3]。然后接着判断 1还是假,再放到数组里[3,1],
    判断到4是偶数,even=true,将4放到新数组里[4],将前面的[false,[3,1]]打印出来


    Enumerable#slice_before 对于每个被chunked的元素依据真假,返回一个集合里,给这个创建一个枚举器


    a = [0, 2, 3, 4, 6, 7, 9]
    prev = a[0]
    p a.slice_before { |e|
    prev, prev2 = e, prev
    prev2 + 1 != e
    }.map { |es|
    es.length <= 2 ? es.join(",") : "#{es.first}-#{es.last}"
    }.join(",")
    #=> "0,2-4,6,7,9"

    解释: 1 prev=a[0] #这时prev为0
    2 进入 { |e|
    prev, prev2 = e, prev
    prev2 + 1 != e
    }
    3 pre =0,prev2 =0
    4 prev2 + 1 != e 为假
    5 将e也就是0放进数组,[0]
    6 当便利到2时, prev2 + 1 != e 为假,然后2放入新数组,[2],

    当chunk后面块结束后 是下面形式

    [0]
    [2, 3, 4]
    [6, 7]
    [9]
    nil

    然后返回这个迭代器,调用map 后面的块

    Enumerable#lazy 直到需要的时候再运行枚举器

    Kernel#dir 文件的目录名

    Kernel#callee 当前方法名作为符号返回

    Module#class_variable_get 得到类变量的值

    Module#class_variable_set 设置类变量的值
    Module#remove_class_variable 移除实例变量

    Module#public_constant 返回一个包含公有常量的列表
    Module#private_constant 返回一个包含私有常量的列表


    Module#singleton_class? 判断是否是singleton类

    Module#prepend include的可替换方法

    Module#public_instance_method 返回包含实例方法的数组

    Object#!~ 如果两个对象相当返回真


    Object#singleton_class 返回对象singleton类
    Object#untrust 标记一个对象不受信任
    Object#untrusted? 如果对象是不受信任返回真
    Object#trust 从对象身上移除不受信任标记

    Object#remove_instance_vari
    able 从对象身上移除实例变量


    Object#public_send 调用公共方法
    Object#public_method 类似method方法,只查找public方法
    Range#bsearch 数组使用二分查找

    Socket.getifaddrs网络访问接口

    String#clear 将字符串清空

    String#chr 返回字符串开头字符

    String#encode 将字符串按照某种编码方式编码


    String#getbyte 将字符换位整数返回

    String#setbyte 使用整数设置字符

    String#byteslice 截取字符

    String#scrub 移除无效的字符序列

  • 相关阅读:
    document.getElementById("mytxt").style.left=""style.left在IE的FF中注意
    asp.net 用户控件中 使用相对路径的解决方法 图片路径问题(用户控件、图片路径) ,ResolveUrl
    探索 Block (一) (手把手讲解Block 底层实现原理)
    iOS 多线程开发 (概念与API简介)
    iOS 性能小点
    iOS runtime (二)(runtime学习之AutoCoding源码分析)
    探索 NSRunLoop (二)(NSRunLoop 自己动手实现SimpleRunLoop)
    iOS NSNotificationCenter (自己实现一个通知中心XMCNotificationCenter)
    iOS runtime (三)(runtime学习之YYModel源码分析)
    iOS runtime(一)(runtime 分析理解)
  • 原文地址:https://www.cnblogs.com/or2-/p/5041047.html
Copyright © 2011-2022 走看看