首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Effective-Ruby》读书笔记

设置环境变量 RUBYOPT 为 ”-w“ 也可以达到相同目的。 如果必须禁用运行时的警告,可以临时将全局变量 $VERBOSE 设置为 nil。...直接看代码吧: # 这里把 initialize 方法体中的内容当做第 counter= 方法的调用也不是毫无道理 # 事实上 initialize 方法会创建一个新的局部变量 counter,并将其赋值为....}` GC::stat 方法会返回一个散列,包含垃圾收集器相关的所有信息。...请记住,该散列中的键以及它们对应垃圾收集器的意义可能在下一个版本发生变化。...在下一个版本的 Ruby 中,GC::stat 散列中的值对应的环境变量可能会发生变化。好消息是 Ruby 2.2 将支持 3 个分代,Ruby 2.1 只支持两个。这可能会影响到上述变量的设定。

4K60

文心一言 VS 讯飞星火 VS chatgpt (136)-- 算法导论11.3 2题

二、用go语言,假设将一个长度为r的字符串散列到m 个槽中,并将其视为一个以 128 为基数的数,要求应用除法散列法。...接下来,我们在main函数中调用HashString函数,并将字符串"hello world"和槽数3作为参数传递给该函数。最后,我们将散列表中对应槽的哈希值打印出来,以验证散列计算的正确性。...2.使用一个循环遍历字节切片,对于每个字节,将其转换为以 128 为基数的数,并将其右移位(相当于除以 128),然后将结果存储在一个变量中。 3.使用除法散列法,将上述变量散列到 m 个槽中。...4.将散列后的结果转换为字节切片,并用一个整数变量存储其长度。 5.将步骤 2 中的变量和步骤 4 中的变量相加,得到最终的散列值。...为了将长度为 r 的字符串视为以 128 为基数的数,我们可以在计算散列值时先将每个字符转换为其对应的十进制数值,然后进行相加。

19250
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Ruby 和 Java 的基础语法比较

    数组,字符串,散列等使用方法,本文不算严格意义的文章,因为示例代码量占了文章的 50% ,而且本文的特点就是会在语法将 Ruby 和 Java 进行对比,不过还是会讲解 Ruby 基本语法为主,本文偏入门级水平...不过在平时遍历数组的时候经常会遇到一种需求,不仅想要拿到数组的元素,还需要拿到当前循环的索引值,Ruby 中提供一个特别的 each 方式实现,就是 each_with_index 方法,它会把 [元素...中的实例方法 Instance method 和 Java 中的普通方法类似,顾名思义就是调用方必须是一个类的实例(对象),需要调用实例方法就必须先通过类构造一个实例对象才能进行调用,具体请看示例代码:...创建散列对象 Time.new # 创建时间对象 函数方法是指没有接收者的方法,这种类型方法在Java中倒是不存在,参考示例代码,例如上文中函数方法 p p "hello" puts "print words...,方法和变量) 调用方式:Ruby 必须使用 :: 通过类名进行外部访问常量,java 把常量只是当成普通的局部变量,使用连接符 .

    2.2K20

    Python中下划线---完全解读

    无论何时从迭代器中获取下一个值都将调用 __next__() 方法。 __reversed__() 方法并不常用。它以一个现有序列为参数,并将该序列中所有元素从尾到头以逆序排列生成一个新的迭代器。...如果某个类定义了 __getattr__() 方法,Python 将只在正常的位置查询属性时才会调用它。如果实例 x 定义了属性color, x.color 将 不会 调用x....__setstate__() * 要重建序列化对象,Python 需要创建一个和被序列化的对象看起来一样的新对象,然后设置新对象的所有属性。...__enter__() 方法将始终返回 self —— 这是 with 语块将用于调用属性和方法的对象 在 with 语块结束后,文件对象将自动关闭。怎么做到的?...__slots__() 自定义散列值 hash(x) x.__hash__() 获取某个属性的值 x.color type(x).__dict__['color'].

    1.6K110

    Python 魔法函数总结

    __itemsize__ 这些字段允许计算类型实例的大小(以字节为单位),0是可变长度, 非0则是固定长度 x....__del__() 自定义散列值 hash(x) x.__hash__() 获取某个属性的值 x.color type(x).__dict__['color'\]....无论何时从迭代器中获取下一个值都将调用 __next__() 方法。 __reversed__() 方法并不常用。它以一个现有序列为参数,并将该序列中所有元素从尾到头以逆序排列生成一个新的迭代器。...如果某个类定义了 __getattr__() 方法,Python 将只在正常的位置查询属性时才会调用它。如果实例 x 定义了属性color, x.color 将 不会 调用x....__flags__ 要重建序列化对象,Python 需要创建一个和被序列化的对象看起来一样的新对象,然后设置新对象的所有属性。

    59910

    【python进阶】Garbage collection垃圾回收1

    如果垃圾回收器停⽌⼯作或运⾏迟缓,像动脉阻塞,你的应⽤程序效率也会下降,直⾄最终死掉。 2.2.一个简单的例子 运⽤实例⼀贯有助于理论的理解。...请注意我⼀直在为变量n1赋新值,Ruby把旧值留在原处。"ABC","JKL"和"MNO"三个Node实例还滞留在内存中。Ruby不会⽴即清除代码中不再使⽤的旧对象!...在内部,创建⼀个对象时,Python总是在对象的C结构体⾥保存⼀个整数, 称为引⽤数 。期初,Python将这个值设置为1: ? 值为1说明分别有个⼀个指针指向或是引⽤这三个对象。...假如我们现在创建⼀个新的Node实例,JKL: ? 与之前⼀样,Python设置JKL的引⽤数为1。...现在,假定我们的程序不再使⽤这两个节点了,我们将 n1 和 n2 都设置为 null(Python中是None)。 ? 好了,Python会像往常⼀样将每个节点的引⽤计数减少到1。

    1K70

    解读Go语言的2020:变革前夜

    如果我们使用的是 Go 语言的 1.15 版本,那么也可以通过设置系统环境变量 GOMODCACHE 来自定义上述存储依赖包的目录。这实际上是为以后彻底废弃 GOPATH 埋下的一个伏笔。...现在,如果我们传给这些方法的第一个参数值是 nil,那么它们都将会立即抛出包含了对应错误信息的 panic。 标准库:新的散列算法包 标准库中多了一个新的代码包:hash/maphash。...这是一个通用的散列算法包,可以将任意的字节序列或者字符串散列成 64 位的整数。从名字上我们也可以看出,它能够帮助我们实现那些基于散列表的数据结构。...不同的 Hash 实例在默认的情况下会有不同的默认种子。因此,这些默认实例为同一个对象计算出的散列值将会不同。 Hash 实例允许手动设置种子(必须由 MakeSeed 函数产生)。...在单一进程中,只要种子相同,Hash 实例为同一个对象计算出的散列值就会相同。不论进行计算的 Hash 实例是一个还是多个,都会如此。 被计算的对象的表现形式可以是字节序列,也可以是字符串。

    49510

    Ruby Programming | 连载 02 - Ruby 语法基础

    赋值运算 x=1y="coffee" 赋值操作时将一个对象(等号右边)绑定到一个局部变量(等号左边)上,即把对象看做一个用变量表示的值 比较运算 x==y2>12的是两个等号,...Ruby 语言中包含的特殊对象如下: 操作 栗子 说明 默认对象 self self 关键字引用默认对象。self 是一个依赖于运行时上下文表示不同对象的角色。...全局变量以 开头,如 year, 之后的变量名不使用局部变量的命名规则,也就是说全局变量中可以包含特殊字符,如 1、* 实例变量为独立的 对象 存储信息,通常以一个单独的 @ 符号开头,后面使用与局部变量相同的命名规则...,不同的是实例变量在 @ 符号之后的第一个字符可以大写,但是不同使用数字;通常来说还是 @ 之后的第一个字母还是使用小写字母。...如 @name、*@age* 类变量是在每一个类层级上存储信息,要区分于实例变量在对象层级上存储信息;对象是由类实例化而来的。类变量以 @@ 开头,使用与局部变量相同的命名规则。

    5.9K10

    Python中反人类直觉的特性,你踩过坑吗?

    'tom'将被驻留,而''.join(['t', 'o', 'm'])不被驻留 当在同一行将 a 和 b 的值设置为 "tom!"...不是按照上面提到的方式被隐式驻留的). 它是一种编译器优化, 特别适用于交互式环境 当在同一行将 a 和 b 的值设置为 "tom!"...b = 257 id(a) # 输出:140232163575152 id(b) # 输出:140232163574768 当 a 和 b 在同一行中被设置为 257 时, Python 解释器会创建一个新对象...如果在当前类的字典中找不到的话就去它的父类中寻找 += 运算符会在原地修改可变对象, 而不是创建新对象. 因此, 在这种情况下, 修改一个实例的属性会影响其他实例和类属性....由于 object is 可散列的(hashable), 但是 list 是不可散列的, 所以它打破了这种传递关系 class MyMetaClass(type): def __subclasscheck

    1.2K10

    Java的ThreadLocal

    主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。...我们首先看下散列表的相关知识: 散列表 理想状态下,散列表就是一个包含关键字的固定大小的数组,通过使用散列函数,将关键字映射到数组的不同位置。...但是在实际使用中,经常会出现多个关键字散列值相同的情况(被映射到数组的同一个位置),我们将这种情况称为散列冲突。...线程中的 ThreadLocalMap 是懒加载的,只有真正的要存变量时才会调用 createMap 创建 ThreadLocal 散列值 当创建了一个 ThreadLocal 的实例后,它的散列值就已经确定了...,如果为空,将创建一个session,并设置到本地线程变量中 try { if(session ==null&&!

    77520

    Ruby学习笔记

    Ruby语言中,以对象为基本单位,可以说所有的元素都是对象。按照之前对于面向对象程序的理解,对象是指包含了特定属性和方法集合的一组程序。对象由类来定义,具体的表现为对象实例。...a = 10,这样一个简单的赋值语句,实际上应当理解为 a = Numeric.new(10) 这样的一种实例化形式。...变量:局部变量(小写字母或_开头)、全局变量($)、实例变量(@)、类变量(@@)、虚拟变量。      Ruby中的变量在声明时,也不需要指定类型,这有点类似于弱类型语言的PHP。...但是在变量被使用时,他的类型就会被确定。 常量:以大写字母开头的变量就是常量 Ruby 中的保留字 ? Ruby中一般以换行来做为语句分割,也可以使用;来作为语义的分割符。...这两个方法,在PHP等脚本语言中也非常常见,能够为处理变量和多行的文本输出带来很大的方便。 另外一个需要关心的问题,就是字符串的编码问题。

    2K20

    【Java 并发】详解 ThreadLocal

    increase 方法时,都会创建一个 value 变量,该变量只对当前调用 increase 方法的线程可见。...我们首先看下散列表的相关知识: 散列表 理想状态下,散列表就是一个包含关键字的固定大小的数组,通过使用散列函数,将关键字映射到数组的不同位置 在理想状态下,哈希函数可以将关键字均匀的分散到数组的不同位置...但是在实际使用中,经常会出现多个关键字散列值相同的情况(被映射到数组的同一个位置),我们将这种情况称为散列冲突。...为了解决散列冲突,主要采用下面两种方式: 分离链表法(separate chaining) 开放定址法(open addressing) 分离链表法 分散链表法使用链表解决冲突,将散列值相同的元素都保存到一个链表中...所以在 get 的时候,首先会看 key 的散列值对应的数组元素是否为要查找的元素,如果不是,再调用 getEntryAfterMiss 方法查找后面的元素。

    54710

    【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则

    你可以让某个readonly值为一个DataTime结构,而不能指定某个const为DataTIme。 ● 可以用readonly值保存实例常量,为类的每个实例存放不同的值。...GetHashCode()函数仅会在一个地方用到,即为基于散列(hash)的集合定义键的散列值时,此类集合包括HashSet和Dictionary容器等。...● 实现自己的GetHashCode( )时,要遵循上述三条原则: 1)如果两个对象相等(由operation==定义),那么他们必须生成相同的散列码。否则,这样的散列码将无法用来查找容器中的对象。...2)对于任何一个对象A,A.GetHashCode()必须保持不变。 3)对于所有的输入,散列函数应该在所有整数中按随机分别生成散列码。这样散列容器才能得到足够的效率提升。...这里有一些规则,可以帮你尽量降低GC的工作量: 1)若某个引用类型(值类型无所谓)的局部变量用于被频繁调用的例程中,那么应该将其提升为成员变量。 2)为常用的类型实例提供静态对象。

    1.8K30

    python入门基础

    ', 'Python']>>> L.clear()>>> L[] L1 = L.copy() 复制L列表生成新的L1列表 >>> L['C', 'JavaScript', 'Java', 'Ruby',...'Python']'PHP'>>> L['C', 'JavaScript', 'Java', 'Ruby', 'Lua', 'C', 'Go', 'Python'] L.remove(x) 将列表的第一个...字典的基本原则 字典是一个键值对的集合,该集合以键为索引,一个键对应一个值信息 字典中的元素以键信息为索引访问 字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。...,一般函数表达特定功能 两个作用:降低编程难度和代码重用 函数的调用 ?...实例2 import wordcloud import jieba text = """ wordcloud是python非常优秀的第三方库,词云以词语为基本单位更加直观和艺术的展示文本词云图,\ 也叫文字云

    2.4K70

    linux运维中的命令梳理(三)

    简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。...)并输出到一个新的文件sir04.txt 中。...awk相识 awk -F"" '{print $n}' 以-F后的引号内的内容为列的分隔符,打印第n行 cut -d"" -fn 以-d后的引号内的内容为列的分隔符,...打印第n行 比如打印a.txt文件中以空格为列的分隔符,打印第5行 awk -F" " '{print $5}' a.txt 当以空格为分隔符的时候,-F" " 可以省去 cut -d" " -f5...会自动在前置文件名后再加上编号 实例1: 使用指令split将文件a.txt每3行切割成一个文件,输入如下命令: 注意:是按照a.txt文件中的行数进行分割的,每3行切分到一个文件中,切割成多个以"

    8.1K81

    python基础知识入门_python新手学院

    ’, ‘Python’]>>> L.clear()>>> L[] L1 = L.copy() 复制L列表生成新的L1列表 >>> L[‘C’, ‘JavaScript’, ‘Java’, ‘Ruby’,...‘Python’]‘PHP’>>> L[‘C’, ‘JavaScript’, ‘Java’, ‘Ruby’, ‘Lua’, ‘C’, ‘Go’, ‘Python’] L.remove(x) 将列表的第一个...请问tu变量中的第一个元素 “alex” 是否可被修改?   元组不可直接被修改,需要转换成列表或字典 b. 请问tu变量中的”k2″对应的值是什么类型?是否可以被修改?...字典的函数和方法 字典的基本原则 字典是一个键值对的集合,该集合以键为索引,一个键对应一个值信息 字典中的元素以键信息为索引访问 字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。....png或.jpg图像文件 w.to_file("outfile.png") 实例 import wordcloud w = wordcloud.WordCloud() #设置wordcloud对象

    2.7K20

    Java基础面试题

    字符串作为基础的数据结构,大量地应用在一些集合容器之中,尤其是一些散列集合,在散列集合 中,存放元素都要根据对象的 hashCode() 方法来确定元素的位置。...由于 String 的不可变,避免重复计算 hashcode ,只要使用缓存的 hashcode 即可,这样一来大大提 高了在散列集合中使用 String 对象的性能。...例如 Person p = new Student(); ,这行代码将会生成一个p变量,该变量的编译时类型为Person,运行时类型为Student。...获取对象时,我们将K传给get,它调用hashCode计算hash从而得到bucket位置,并进一步调用 equals()方法确定键值对。...创建Runnable实现类的实例,并将其作为Thread的target来创建Thread对象,Thread对象为线 程对象。 调用线程对象的start()方法来启动该线程。

    31540
    领券