Ruby 1.8 和 Ruby 1.9 有什么区别

2023-11-22

我不清楚 Ruby 的“当前”版本(1.8)和“新”版本(1.9)之间的区别。对于这些差异以及为什么如此不同,是否有一个“简单”或“简单”的解释?


山姆·鲁比有一个概述差异的酷幻灯片.

为了将这些信息内联起来以便于参考,并且以防万一链接在抽象的未来失效,这里是 Sam 幻灯片的概述。幻灯片放映不太容易查看,但将所有内容都排列在这样的列表中也很有帮助。

Ruby 1.9 - 主要特性

  • 表现
  • 线/纤维
  • 编码/统一码
  • gems(大部分)现在是内置的
  • if 语句不会在 Ruby 中引入作用域。

发生了什么变化?

单字符串。

Ruby 1.9

irb(main):001:0> ?c
=> "c"

红宝石 1.8.6

irb(main):001:0> ?c
=> 99

字符串索引。

Ruby 1.9

irb(main):001:0> "cat"[1]
=> "a"

红宝石 1.8.6

irb(main):001:0> "cat"[1]
=> 97

不再支持 {"a","b"}

Ruby 1.9

irb(main):002:0> {1,2}
SyntaxError: (irb):2: syntax error, unexpected ',', expecting tASSOC

红宝石 1.8.6

irb(main):001:0> {1,2}
=> {1=>2}

Action:转换为 {1 => 2}


Array.to_s现在包含标点符号

Ruby 1.9

irb(main):001:0> [1,2,3].to_s
=> "[1, 2, 3]"

红宝石 1.8.6

irb(main):001:0> [1,2,3].to_s
=> "123"

Action:使用 .join 代替


When 语句中冒号不再有效

Ruby 1.9

irb(main):001:0> case 'a'; when /\w/: puts 'word'; end
SyntaxError: (irb):1: syntax error, unexpected ':',
expecting keyword_then or ',' or ';' or '\n'

红宝石 1.8.6

irb(main):001:0> case 'a'; when /\w/: puts 'word'; end
word

Action:使用分号、then 或换行符


块变量现在隐藏局部变量

Ruby 1.9

irb(main):001:0> i=0; [1,2,3].each {|i|}; i
=> 0
irb(main):002:0> i=0; for i in [1,2,3]; end; i
=> 3

红宝石 1.8.6

irb(main):001:0> i=0; [1,2,3].each {|i|}; i
=> 3

Hash.index已弃用

Ruby 1.9

irb(main):001:0> {1=>2}.index(2)
(irb):18: warning: Hash#index is deprecated; use Hash#key
=> 1
irb(main):002:0> {1=>2}.key(2)
=> 1

红宝石 1.8.6

irb(main):001:0> {1=>2}.index(2)
=> 1

Action:使用Hash.key


Fixnum.to_sym现在已经走了

Ruby 1.9

irb(main):001:0> 5.to_sym
NoMethodError: undefined method 'to_sym' for 5:Fixnum

红宝石 1.8.6

irb(main):001:0> 5.to_sym
=> nil

(续)Ruby 1.9

# Find an argument value by name or index.
def [](index)
  lookup(index.to_sym)
end

svn.ruby-lang.org/repos/ruby/trunk/lib/rake.rb


哈希键现在无序

Ruby 1.9

irb(main):001:0> {:a=>"a", :c=>"c", :b=>"b"}
=> {:a=>"a", :c=>"c", :b=>"b"}

红宝石 1.8.6

irb(main):001:0> {:a=>"a", :c=>"c", :b=>"b"}
=> {:a=>"a", :b=>"b", :c=>"c"}

订单为插入顺序


更严格的 Unicode 正则表达式

Ruby 1.9

irb(main):001:0> /\x80/u
SyntaxError: (irb):2: invalid multibyte escape: /\x80/

红宝石 1.8.6

irb(main):001:0> /\x80/u
=> /\x80/u

tr and Regexp现在了解 Unicode

Ruby 1.9

unicode(string).tr(CP1252_DIFFERENCES, UNICODE_EQUIVALENT).
  gsub(INVALID_XML_CHAR, REPLACEMENT_CHAR).
  gsub(XML_PREDEFINED) {|c| PREDEFINED[c.ord]}

pack and unpack

红宝石 1.8.6

def xchr(escape=true)
  n = XChar::CP1252[self] || self
  case n when *XChar::VALID
    XChar::PREDEFINED[n] or 
      (n>128 ? n.chr : (escape ? "&##{n};" : [n].pack('U*')))
  else
    Builder::XChar::REPLACEMENT_CHAR
  end
end
unpack('U*').map {|n| n.xchr(escape)}.join

BasicObject比更残酷BlankSlate

Ruby 1.9

irb(main):001:0> class C < BasicObject; def f; Math::PI; end; end; C.new.f
NameError: uninitialized constant C::Math

红宝石 1.8.6

irb(main):001:0> require 'blankslate'
=> true
irb(main):002:0> class C < BlankSlate; def f; Math::PI; end; end; C.new.f
=> 3.14159265358979

Action:使用::Math::PI


授权变更

Ruby 1.9

irb(main):002:0> class C < SimpleDelegator; end
=> nil
irb(main):003:0> C.new('').class
=> String

红宝石 1.8.6

irb(main):002:0> class C < SimpleDelegator; end
=> nil
irb(main):003:0> C.new('').class
=> C
irb(main):004:0>

缺陷17700

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 1.8 和 Ruby 1.9 有什么区别 的相关文章

  • 如何编写一个在安装 RubyGem 时调用的钩子?

    我想编写一个 Ruby 片段 当我的 Gem 首次安装时运行 sudo gem install mygem 能做到吗 看起来并没有真正支持 我发现了一个 post install message 属性 您应该能够在 gem 规范中设置该属性
  • Ruby mp3 Id3 解析

    目前我正在从事一个音乐项目 处理用户 mp3 上传 问题是我找不到适用于所有文件的 id3 库 我努力了id3 ruby and Mp3Info库 但它们都没有给我一致正确的结果 例如 最常见的问题 错误的流参数 比特率和采样率 有时是持续
  • Ruby 可选参数和多个参数

    我试图将方法的第一个参数设置为可选 后跟任意数量的参数 例如 def dothis value 0 args 我遇到的问题是 这似乎实际上不可能 当我打电话时dothis hey how are you good 我希望它将值设置为默认值
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered
  • Ruby gem 环境问题 - LoadError: no such file to load -- robots

    我正在尝试使用 anemone gem 编写一个爬虫 这需要 robots gem 不管出于什么原因 机器人绝对不会包括在内 这是我的一些环境信息 gem list d robots LOCAL GEMS robots 0 10 1 Aut
  • 我必须使用什么加密程序来通过 HTTP 协议发送加密的“电子邮件”和“密码”值?

    我正在使用 Ruby on Rails 3 我想通过 HTTP 协议发送 电子邮件 和 密码 值 我知道 我不应该 但我需要 我需要从发送用户凭据我的客户申请到一个我的服务应用 我可以使用公共和私人RSA密钥来实现这一点 但如果是这样 我不
  • 如何在initialize()中使用define_method

    尝试使用define method inside initialize但得到未定义的方法define method 我究竟做错了什么 class C def initialize n define method n puts some me
  • 在 Rails 中呈现路由错误的 404 页面

    我试图在 Rails 中渲染集成的 404 页面作为例外 我尝试了这个 但仍然收到路由错误页面 posts controller rb def destroy if current user username post email post
  • 随机采样数组的唯一子集

    如果我有一个数组 a 1 2 3 如何随机选择数组的子集 以使每个子集的元素都是唯一的 也就是说 对于a可能的子集是 1 2 3 1 2 2 3 1 2 3 我无法生成所有可能的子集 因为 a 的实际大小非常大 因此有很多很多子集 目前 我
  • 将“Authorization Bearer”哈希添加到 Net::HTTP post 请求 (Ruby)

    我怎样才能添加Authorization Bearer到 POST 请求Net HTTP 我只能在文档中找到 基本身份验证 的帮助 req basic auth user pass Source https docs ruby lang o
  • Chef - 使用动态变量创建模板?

    我在厨师食谱上遇到了一些挑战 我是厨师新手 所以请耐心等待 第 1 步 我的厨师食谱安装 Ruby Passenger 然后与 Nginx 一起编译 Passenger nginx 模块 Install passenger and ngin
  • ruby 管道、IO 和 stderr 重定向

    我希望有一个 ruby 程序 一个 rake 任务 观察另一个 rake 任务的输出 输出写入器输出到 stderr 我想读一下这些行 我很难设置它 如果我有一个作家 stdout writer rb 不断打印一些东西 usr bin en
  • Ruby 在 Windows 上找不到 sqlite3 驱动程序

    我正在尝试在 Windows 上设置 Ruby on Rails 我正在使用看起来不错的 Flash Rails 发行版 但是 sqlite3 有一个问题 我发现线程告诉我安装版本 1 2 3 安装得很好 我使用的是 ruby 1 9 0
  • 有没有办法避免自动更新 Rails 时间戳字段?

    如果您有数据库列created at and updated at当您创建和更新模型对象时 Rails 将自动设置这些值 有没有办法在不接触这些列的情况下保存模型 我正在引入一些旧数据 我想根据 不同名称的 旧数据字段中的相应值设置这些值
  • ruby中如何将binary32转换为float

    我有一个以 IEEE 32 编码的 binary32 如何将 0x0040EDC2 转换为 118 625 我尝试了几种打包和解包选项 但没有成功 IEEE http en wikipedia org wiki Single precisi
  • 通过 SO_RCVTIMEO 套接字选项在 Ruby 中设置套接字超时

    我试图通过 SO RCVTIMEO 套接字选项在 Ruby 中设置套接字超时 但它似乎对任何最近的 nix 操作系统都没有影响 使用 Ruby 的 Timeout 模块不是一个选择 因为它需要为每个超时生成和连接线程 这可能会变得昂贵 在需
  • RSpec 2 中使用 OR 相等

    下面这个例子的正确写法是什么 玩家的分数应等于 5 或 8 it should equal 5 or 8 do player score should 5 or 8 end Thanks Tim 5 or 8将始终产生结果 5 并且不会执行
  • Cucumber / Savon 省略或删除日志输出

    在运行黄瓜测试时 我得到 除了测试结果之外 许多与调试 日志相关的输出 格式如下 D 2013 03 06T12 21 38 911829 49031 DEBUG SOAP request D 2013 03 06T12 21 38 911
  • ArgumentError:Ruby 中的参数数量错误

    试图解决这个问题 class Person def initialize name name name end def greet other name puts Hi other name my name is name end end
  • 查找 Rails 应用程序中未使用的代码

    如何查找正在运行和未运行的代码生产中 该应用程序经过充分测试 但还有很多测试unused代码 因此 他们在运行测试时得到覆盖 我想重构并清理这个烂摊子 它一直在浪费我的时间 我有很多后台工作 这就是为什么我希望生产环境来指导我 在 Hero

随机推荐

  • 估计由一组点生成的图像面积(Alpha 形状??)

    I have a set of points in an example ASCII file showing a 2D image I would like to estimate the total area that these po
  • MySQL“IN”子句中的逗号分隔值

    我的一个表中有一个列 其中存储多个用逗号分隔的 id 有没有一种方法可以在查询的 IN 子句中使用此列的值 专栏 city 的值如下6 7 8 16 21 2 我需要用作 select from table where e ID in Se
  • 执行 argc=0 的进程

    是否可以执行 argc 0 的进程 我需要执行一个程序 但它的 argc 等于 0 非常重要 有没有办法做到这一点 我尝试在命令行中放入 2 32 个参数 这样看起来就好像 argc 0 但参数数量有最大限制 您可以编写一个程序来调用exe
  • 如何使用单个锚标记打开多个链接

    所以这是一个简单但有趣的问题 如何使用单个链接打开多个链接 a 元素 使用它只会打开第一个href a href http www yahoo com target blank Click Here a 你当然可以尝试这个 Demo a h
  • 如何避免这种非常繁重的查询会减慢应用程序的速度?

    我们有一个在生产环境中运行的 Web 应用程序 有时客户抱怨应用程序变得多么慢 当我们检查应用程序和数据库的情况时 我们发现这个 宝贵 的查询正在由多个用户同时执行 从而对数据库服务器造成极高的负载 SELECT NULL AS table
  • 从 SQL Server 批量获取记录的最佳方法是什么

    Scenario 我们正在从 SQL Server 获取行到 C Net 控制台应用程序 并通过存储过程对从 SQL Server 检索到的数据执行操作 执行操作后 新数据将使用 C MongoDB Driver 存储到 MongoDB 中
  • 如何在 C# 中打开 Windows 7 事务文件

    我了解 Windows 7 支持事务处理文件 我如何在 C 中使用它们 通过写作互操作包装器围绕非托管功能 我也曾在博客上写过一次关于它的文章 这是另一个例子
  • mac os php intactive模式没有提示

    我正在尝试从终端窗口以交互模式运行 PHP 当我运行命令时 php a 它显示 已启用交互模式 但没有显示应有的 php gt 提示 我必须按 control z 才能退出交互模式 但我可以在交互模式 启用 时执行任何命令 有谁知道如何解决
  • Request.Browser.Platform 未返回 iPad、OSX 或 Windows 7

    我正在研究一些高级浏览器检测 并且我已经下载了MDBF来自 CodePlex 的浏览器文件 不幸的是 我的 Request Browser Platform 以及其他一些东西在我的 iPad Mac OSX Snow Leopard 和 W
  • jquery某类元素索引

    我在容器内有某个类的多个元素 我想获取该特定元素的索引 假设我有这样的 HTML div div class MyClass My Class div div class SomeClass Not My Class div div cla
  • 如何读取iOS WidgetKit应用程序创建的文件?

    我正在开发一个带有 widgetKit 扩展的应用程序 我想在小部件上显示用户创建的数据 widgetKit 如何读取应用程序创建的文件 你应该使用应用程序组功能在您的目标之间共享数据 这里有一个好的tutorial作者 雷文德利希
  • 如何在node.js中使用导入和导出?

    我有两个文件 app js 模块 js app js 将有表达式 import foo from module use foo module js 将会有 export default expression 但它不起作用 我目前正在使用节点
  • Qt:Windows 7 任务栏扩展支持的当前状态如何?

    Windows 7 Aero 主题拥有全新任务栏带扩展 Qt 中任务栏扩展 跳转列表等 支持的当前状态如何 据我所知 目前尚不支持此操作 但没有什么可以阻止您仅在 Windows 上进行本机操作系统 API 调用来执行此操作 如果您想查看此
  • 根据另一个列表的排序方式对 Dart 中的列表进行排序

    我正在尝试参考另一个列表对列表进行排序 考虑这个例子 List
  • 在控制台中打印 JavaScript 变量的值

    我有一个存储一些值的 JavaScript 变量 我可以在 Firebug 或其他地方回显它以查看存储的值吗 var p user permissions 没关系 我必须添加这一行 var p user permissions Before
  • 使用 Ghostscript 处理(重新映射)PDF 中缺失/有问题的(CID/CJK)字体?

    简而言之 我正在处理一个有问题的 PDF 其中 无法在文档查看器中完全呈现 例如evince 因为缺少字体信息 然而 ghostscript可以完全渲染相同的PDF 因此 无论怎样ghostscript用于填空 也许是后备字形 或者是访问字
  • 格式化字符串时多次插入相同的值

    我有一个这种形式的字符串 s arbit string s hello world s hello world s s s s 字符串中的所有 s 具有相同的值 即 s 有更好的写法吗 而不是列出 s 三遍 您可以使用高级字符串格式化 在
  • 适用于桌面和移动应用程序的 OAuth 2.0

    我正在研究 OAuth 2 0 协议 我陷入了为不在 Web 服务器上运行的桌面 移动应用程序生成不记名令牌的问题 对于 Web 应用程序 我很清楚 OAuth 2 0 协议流程 认为myapp com想要访问protectedresour
  • 在R中,使用melt(),如何隐藏警告消息?

    我正在熔化一些数据 并且不想提供 id var 参数来熔化 数据融化得很好 但我明白了 No id variables using all as measure variables 有没有办法阻止该消息出现 或者有办法说 id var de
  • Ruby 1.8 和 Ruby 1.9 有什么区别

    我不清楚 Ruby 的 当前 版本 1 8 和 新 版本 1 9 之间的区别 对于这些差异以及为什么如此不同 是否有一个 简单 或 简单 的解释 山姆 鲁比有一个概述差异的酷幻灯片 为了将这些信息内联起来以便于参考 并且以防万一链接在抽象的