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

Java转Ruby【快速入门】

动态类型 Ruby 中的数据更像是一种符号,在使用的时候不检查类型,而是在运行时动态的检查。 为什么是 Ruby ?...数据类型 Ruby 中有以下几种不同的数据类型: 数字/ 字符串/ 符号/ 哈希/ 数组/ 布尔 比较在意的是 Ruby 并没有 Java 中的枚举类型,可能是出于安全方面的考虑吧.....attr_reader 对应在 Java 中相当于为 first_name 和 last_name 定义了 getter ,在 Ruby 中,从对象外部不能直接访问实例变量或对实例变量赋值,需要通过方法来访问对象的内部...Ruby return 语句 Ruby 中的 return 语句用于从 Ruby 方法中返回一个或多个值 示例: def method i = 100 j = 200 k = 300...您使用 yield 语句调用 test 块。 但是如果方法的最后一个参数前带有 &,那么您可以向该方法传递一个块,且这个块可被赋给最后一个参数。

3.2K50

《Effective-Ruby》读书笔记

(如果 Person 类中没有找到的话,Ruby 会继续向上直到到达 BasicObject) 但是如果方法在查找过程中直到类树的根节点仍然没有找到匹配的办法,那么它将重新从起点开始查找,不过这一次会查找...有些类比如表示数字的类会有一个粗糙的等号操作符进行类型转换 case 表达式使用 “===“ 操作符来测试每个 when 语句的值。...在函数式编程的范畴中,它是一个可以将一个数据结构转换成另一种结构的折叠函数。...#fetch 方法 # 该方法的第一个参数是你希望从哈希中查找的键,但是 fetch 方法可以接受一个可选的第二个参数 # 如果指定的 key 在当前的哈希中找不到,那么取而代之,fetch 的第二个参数会返回...在 ruby-prof gem 和 Ruby 自带的标准 profile 库之间,选择前者,因为前者更快而且可以提供多种不同的报告。

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

    Ruby学习笔记

    变量:局部变量(小写字母或_开头)、全局变量($)、实例变量(@)、类变量(@@)、虚拟变量。      Ruby中的变量在声明时,也不需要指定类型,这有点类似于弱类型语言的PHP。...但是在变量被使用时,他的类型就会被确定。 常量:以大写字母开头的变量就是常量 Ruby 中的保留字 ? Ruby中一般以换行来做为语句分割,也可以使用;来作为语义的分割符。...,所以Ruby的Case语句使用起来,功能可以非常的强大。...模块可以在类中引入,这样模块的方法就会成为类的方法。可以使用这个小技巧来实现Ruby的多重继承。 Ruby中的方法(函数)      Ruby中的方法区分为实例的方法、类的方法、函数性方法。...在程序开发中,字符串处理常见的操作包括:去掉前后的空格(chomp)、去掉行尾的换行(strip)、查找字符串、替换字符串(sub、gsub、tr、正则等)、截取字符串(索引方式、函数方式)、计算字符串的长度等

    2K20

    CC ++与Rust的性能

    但是,这不是没代价的:C ++代码中的大多数函数都必须带有额外的异常表,可以捕获的异常表和适当的清除表。函数结尾不会在正常的工作流中执行,但是它们增加了代码的大小,从而导致CPU指令缓存中的额外污染。...不管switch语句优化(编译器使用查找表或二进制搜索进行优化),代码都存在3个问题: 查找状态100仍然比直接跳转代价更高。...当状态代码放置在state101的代码之后时100,我们必须重新输入whileandswitch语句,即再次查找下一个状态,而不是仅进一步移动一个字符并直接跳到下一个状态。...const带有或不带有mutable,const引用和变量的C ++类提供了更细粒度的可变性,但是也不能涵盖所有情况。...---- 结论 在为Tempesta FW开发HTTP解析器时,达到了C语言的极限:如果没有在switch语句中进行查找,就无法直接跳到解析器的所需状态,也无法获得令人满意的代码布局。

    5.6K30

    数据说话:Go语言的Switch和Map性能实测

    我一开始认为用switch语句进行分支跳转比一个map查找和函数调用更快。...一个函数可以在switch语句里被内联,但是函数map就不会。我们有必要测试一下函数内联对性能的影响。...在现实世界中,分支跳转的选择通常会导致一个内存的读取。为了模拟这个行为,我们使用一个简单的查找来决定跳转分支。...在32个跳转分支的测试里,map查找延迟从11ns涨到了22ns。具体的数据根据跳转分支的数目以及函数是否被内联会有变化,但是性能基本都下降了一半。...结论 我最初想回答的问题是,用函数map来替换switch语句对性能是否会有影响。我假设switch语句会快一点。但是我错了。Map通常会更快,而且快好几倍。

    2.5K50

    Python名词解释

    参数分为两种: 关键字参数: 在函数调用中前面带有标识符(例如 name=)或者作为包含在前面带有 ** 的字典里的值传入。...不过,某些标准库或第三方库的扩展模块被设计为在执行计算密集型任务如压缩或哈希时释放 GIL。此外,在执行 I/O 操作时也总是会释放 GIL。...大多数 Python 中的不可变内置对象都是可哈希的;可变容器(例如列表或字典)都不可哈希;不可变容器(例如元组和 frozenset)仅当它们的元素均为可哈希时才是可哈希的。...interactive -- 交互 Python 带有一个交互式解释器,即你可以在解释器提示符后输入语句和表达式,立即执行并查看其结果。...一条语句可以是一个 expression 或某个带有关键字的结构,例如 if、while 或 for。 struct sequence -- 结构序列 具有命名元素的元组。

    1.5K50

    提高PHP性能效率的几个技巧

    使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。 ● 用@屏蔽错误消息的做法非常低效,极其低效。...● 方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。派生类中的方法运行起来要快于在基类中定义的同样的方法。...调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。...但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。...这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代 码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。

    1.3K10

    良好的书写规范提高PHP代码执行效率

    13、使用选择分支语句(译注:即 switch case)好于使用多个 if、else if 语句。 14、用 @ 屏蔽错误消息的做法非常低效,极其低效。...18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。 19、递增一个全局变量要比递增一个局部变量慢 2 倍。...但是,由于 strlen() 是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP 不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。...也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。 34、当执行变量$i的递增或递减时,$i++ 会比 ++$i 慢一些。...SQL 语句,在可能的情况下尽量少的进行 INSERT、UPDATE 操作(在 update 上,我被恶批过); 46、尽可能的使用 PHP 内部函数(但是我却为了找个 PHP 里面不存在的函数

    2.3K50

    27 个问题,告诉你Python为什么这么设计

    为什么 join()是一个字符串方法而不是列表或元组方法? 异常有多快? 为什么Python中没有switch或case语句? 难道不能在解释器中模拟线程,而非得依赖特定于操作系统的线程实现吗?...在 C++ 中,可以通过缺少局部变量声明来判断(假设全局变量很少见或容易识别) —— 但是在 Python 中没有局部变量声明,所以必须查找类定义才能确定。...为什么Python中没有switch或case语句? 你可以通过一系列 if... elif... elif... else.轻松完成这项工作。...但是,由于无论谁更改键对象都无法判断它是否被用作字典键值,因此无法在字典中修改条目。然后,当你尝试在字典中查找相同的对象时,将无法找到它,因为其哈希值不同。...如果你尝试查找旧值,也不会找到它,因为在该哈希表中找到的对象的值会有所不同。 如果你想要一个用列表索引的字典,只需先将列表转换为元组;用函数 tuple(L) 创建一个元组,其条目与列表 L相同。

    6.7K11

    如何提高PHP编程效率,提升程序编译质量(53条)

    13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。 14、用@屏蔽错误消息的做法非常低效,极其低效。...25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。...但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。...也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。 34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。...这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。

    1.2K50

    提高PHP编程效率的53个要点

    13、使用选择分支语句(译注:即 switch case)好于使用多个 if,else if 语句。 14、用@屏蔽错误消息的做法非常低效,极其低效。...18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。 19、递增一个全局变量要比递增一个局部变量慢 2 倍。...但是,由于 strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP 不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。...也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。 34、当执行变量$i 的递增或递减时,$i++会比++$i 慢一些。...语句,在可能的情况下尽量少的进行 Insert、Update 操作(在 update 上,我被恶批过); 46、尽可能的使用 PHP 内部函数(但是我却为了找个 PHP 里面不存在的函数,浪费了本可以写出一个自定义函数的时间

    1.4K60

    50个小技巧提高PHP执行效率

    14、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。15、用@屏蔽错误消息的做法非常低效,极其低效。...26、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。...但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。...也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。31、当执行变量i的递增或递减时,i++会比++i慢一些。...这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并指望它们能立即变快,没用的。i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。

    85810

    MySQL秘籍之索引与查询优化实战指南

    简单Case函数和Case搜索函数。...HASH 索引不是基于树形的数据结构查找数据,而是根据索引列对应的哈希值的方法获取表的记录行。...普通索引允许在定义索引的列中插入重复值和空值。创建普通索引时,通常使用的关键字是 INDEX 或 KEY。...你写SQL语句的时候,没有主动指定使用哪个索引的话,用哪个索引是由MySQL来确定的。我们日常开发中,不断地删除历史数据和新增数据的场景,有可能会导致MySQL选错索引。那么有哪些解决方案呢?...因此这又回到前面所说的,那就是索引的选择性!索引的选择性越高则查询效率越高,因为选择性高的索引可以让 MySQL 在查找时过滤掉更多的行,数据查询速度更快!

    17110

    Python数据结构与算法笔记(4)

    根据散列函数,两个或者更多项将需要在同一槽中,这种现象被称为碰撞(也被称为冲突)。 目标是创建一个散列函数,最大限度地减少冲突数,易于计算,并均匀分布在哈希表中的项。...还可以基于字符的项(如字符串)创建哈希函数 哈希函数必须是高效的,以便他不会称为存储和搜索过程的主要部分。如果哈希函数太复杂,则计算槽名称的程序要比之前所述的简单地进行基本的顺序或二分搜索更耗时。...如果键已经在map中,那么用新值替换旧值 get(key)给定一个键,返回存储在map中的值或None del使用del map[key]形式的语句从map中删除键值对 len()返回存储在map中的键值对的数量...in返回True对于key in map语句,如果给定的键在map中,否则为False 字典的一个很大的好处是,给定一个键,我们可以非常快速地查找相关的值。...我们可以使用具有顺序或二分查找的列表,但是使用哪个哈希表更好,因为查找哈希表中的项可以接近O(1)性能 hash法分析 分析散列表的使用最重要的信息是负载因子lambda。

    1.6K10

    Go语言学习15-基本流程控制

    代表了一个常量、类型、变量或函数(不包括方法)的,被声明在顶层的(即在任何函数声明之外被声明的)标识符的作用域是代码包代码块。...对于一个代表了常量或变量的标识符,如果它被声明在函数内部,那么它的作用域总是包含它的声明的那个最内层的代码块。...对于一个代表了类型的标识符,如果它被声明在函数内部,那么它的作用域就是包含它的声明的那个最内层的代码块。 在Go语言中,可以在某个代码块中对一个已经在包含它的外层代码块中声明过的标识符进行重声明。...除了特殊的内建函数和代码包 unsafe 中的函数,针对其他函数和方法的调用表达式和针对通道类型的接收表达式都可以出现在语句上下文中。在必要时,还可以使用圆括号将它们括起来。...例如: for { number++ } 4.2 range 子句 for 语句使用 range 子句可以迭代出一个数组或切片值中的每个元素,一个字符串值中的每个字符或者一个字典值中的每个键值对

    11821

    【机器学习吃掉算法】谷歌用ML模型替代数据库组件,或彻底改变数据系统开发

    但是,数据库在应用索引时,对数据本身并不了解,数据相当于一个黑盒,而不了解数据的分布,造成了很大的浪费。 举例来说,如果键的范围在0到500m之间,比起用哈希,直接把键当索引速度可能更快。...如果知道了数据的累积分布函数(CDF),“CDF*键*记录大小”可能约等于要查找的记录的位置,这一点也适用于其他数据分布的情况。 ?...用机器学习模型替换B树的好处是: 索引结构更小:更少的主内存或L1缓存 查找速度更快:因为索引变小了 更强的并行性(TPU),而不是B-树中的分层if语句 这里有一个关键点,那就是用计算换内存,计算越来越便宜...摘要 索引就是模型:B-Tree-Index可以被看作一个将键(key)映射到排序数组中记录位置的模型,哈希索引可以被看作将键映射到未分类数组中记录位置的模型,而BitMap-Index可以被看作查看数据记录是否存在的模型...本文关键思想是,一个模型可以学习排序顺序或查找键的结构,并使用这个信号来有效预测记录的位置或记录是否存在。

    80980

    Ruby 和 Java 的基础语法比较

    语句 case 语句 先看实例和对比代码: a, b = 10, 20 p "a 比 b 大" if a > b p "a 比 b 小" if a < b # => a 比 b 小 # unless...= b) System.out.println("a 和 b 不相等"); //=> a 比 b 小 还有 case 语句主要用于多条件进行判断,语句用法是 case~when~end 进行组合条件判断...each, for 会比较多,在循环上的区别,大多只是两种语言在语法上的区别 方法 分类 Ruby 中的方法大致可分为 3 类: 实例方法 类方法 函数式方法 实例方法:Ruby 中的实例方法 Instance...Ruby 类只有 initialize 构造函数,Java 可以根据参数不同定义不同的构造函数,Java 构造函数必须于类名相同 Ruby 和 Java 在类的命名规则上是一致的,类名必须是首字母大写开头...在异常处理的区别: Ruby 标准异常库都是继承 Exception 类,程序通常只能处理 StandarError 异常或其子类 Java 异常都是继承 Throwable ,异常被划分为 Error

    2.2K20

    Python 中有 3 个不可思议的返回功能

    说明: Python 字典通过检查键值是否相等和比较哈希值来确定两个键是否相同. 具有相同值的不可变对象在Python中始终具有相同的哈希值...." 语句时, 因为Python将 5 和 5.0 识别为 some_dict 的同一个键, 所以已有值 "JavaScript" 就被 "Python" 覆盖了 第二个:异常处理中的return def...try 中执行 return, break 或 continue 后, finally 子句依然会执行....函数的返回值由最后执行的 return 语句决定. 由于 finally 子句一定会执行, 所以 finally 子句中的 return 将始终是最后执行的语句....因为 (在CPython中) id 函数使用对象的内存地址作为对象的id值, 所以两个对象的id值是相同的. 综上, 对象的id值仅仅在对象的生命周期内唯一.

    43110

    python教程:python三个不可思议的返回

    说明: Python 字典通过检查键值是否相等和比较哈希值来确定两个键是否相同,具有相同值的不可变对象在Python中始终具有相同的哈希值....() from_finally 说明: 当在 “try…finally” 语句的 try 中执行 return, break 或 continue 后, finally 子句依然会执行....函数的返回值由最后执行的 return 语句决定. 由于 finally 子句一定会执行, 所以 finally 子句中的 return 将始终是最后执行的语句....因为 (在CPython中) id 函数使用对象的内存地址作为对象的id值, 所以两个对象的id值是相同的. 综上, 对象的id值仅仅在对象的生命周期内唯一....在对象被销毁之后, 或被创建之前, 其他对象可以具有相同的id值. 那为什么 is 操作的结果为 False 呢?

    58210
    领券