您好,登录后才能下订单哦!
本篇内容主要讲解“Ruby 2.4有什么新特征”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ruby 2.4有什么新特征”吧!
按照过去几年的传统, Ruby核心团队在圣诞节发布了新的Ruby版本。 我将在这里总结Ruby 2.4中一些有趣的新函数。
以前的: Ruby 2.3 。
Fixnum
和 Bignum
已统一为Integer
类。
到目前为止,我们有两个用于存储整数的类- Fixnum
(表示小整数), Bignum
(表示超出此范围的数字)。 但是,这些是实施细节 程序员在编写代码时无需担心。
这两个类已由单个 Integer
类代替。 以前, Integer
是这两个类的超类, 但现在 Fixnum
和 Bignum
都是Integer
。
# 2.342.class #=> Fixnum(2**62).class #=> Bignum# 2.442.class #=> Integer(2**62).class #=> IntegerFixnum == Integer #=> trueBignum == Integer #=> true
函数#12005:将Fixnum和Bignum统一为整数
Tanaka Akira的幻灯片
Ruby 2.4将Fixnum和Bignum统一为Integer (BigBinary博客)
新的Integer#digits
方法
42.digits #=> [2, 4]
浮点修饰符的精度
Float
方法,例如#ceil
,#floor
,#truncate
和#round
采用可选参数设置精度。
1.567.round #=> 21.567.round(2) #=> 1.57123.456.round(-1) #=> 120
Float#round
默认行为保持不变
这不是真的改变, 但是默认行为的这种变化最初使它成为一种预览版本, 后来又恢复了。
默认情况下,#round
使用上舍入行为,即。 1.5将四舍五入为2。 新的行为是使用银行家的四舍五入,将四舍五入到最接近的偶数。 这可能会导致许多现有应用程序中依赖于上舍入四舍五入的错误, 因此保留了原始默认设置。
# suggested behavior1.5.round #=> 22.5.round #=> 2# actual behavior1.5.round #=> 22.5.round #=> 3
Float#round
选项
即使恢复了从最近到最近的变化, Float#round
中引入了新选项 允许您显式设置要使用的舍入类型。
2.5.round #=> 32.5.round(half: :even) #=> 22.5.round(half: :down) #=> 22.5.round(half: :up) #=> 3
binding.irb
我非常喜欢 binding.pry
方法的pry gem,该方法可以在运行代码时打开REPL。 IRB现在已经引入了此函数,并且当ruby遇到 binding.irb
时,ruby现在会打开一个REPL。
Hash#compact
此方法以及bang版本的#compact!
, 从哈希中删除值为nil的键。
{ a: "foo", b: false, c: nil }.compact#=> { a: "foo", b: false }
Hash#transform_values
将块应用于哈希中的每个值。 还提供了用于修改现有哈希的#transform_values!
方法。 文档中的示例:
h = { a: 1, b: 2, c: 3 } h.transform_values {|v| v * v + 1 } #=> { a: 2, b: 5, c: 10 } h.transform_values(&:to_s) #=> { a: "1", b: "2", c: "3" }
字符串支持Unicode大小写映射
到目前为止,Ruby仅对ASCII字符执行大小写转换。 String
和Symbols
现在已扩展为可以使用unicode字符。
# 2.3"Türkiye".upcase #=> "TüRKIYE""TÜRKİYE".downcase #=> "tÜrkİye"# 2.4"Türkiye".upcase #=> "TÜRKIYE""TÜRKİYE".downcase #=> "türki̇ye"
函数#10085:将非ASCII大小写转换添加到String#upcase,#downcase,#swapcase,#capitalize
指定字符串缓冲区大小
String.new
现在允许capacity
参数 指定缓冲区的大小。 这将带来性能上的好处 当字符串将被多次连接时。
String.new('foo', capacity: 1_000)
Symbol#match
现在类似于 String#match
Symbol#match
用于返回匹配位置, 而 String#match
返回了 MatchData
对象。 这已在2.4中修复,现在都返回 MatchData
。
# 2.3:hello_ruby.match(/ruby/) #=> 6# 2.4:hello_ruby.match(/ruby/) #=> #<MatchData "ruby">
IO#gets
和其他方法会获得断断续续的标志
现在,您可以添加一个可选的 chomp:true
标志到 #gets
,#readline
,#each_line
,#readlines
和 IO.foreach
。
# In 2.3, you did this foo = gets.chomp # 2.4 foo = gets(chomp: true)
Regexp#match?
此新方法返回true或false,而不更新$〜
全局变量。 由于它不会创建 MatchData
对象或更新 $〜
对象, 它的效果要优于#match
。
/foo/.match?('foo') #=> true$~ #=> nil
Regexp#named_captures
返回表示有关命名捕获的信息的哈希。
/(?<fname>.+) (?<lname>.+)/.match('Ned Stark').named_captures#=> {"fname"=>"Ned", "lname"=>"Stark"}
Enumerable#sum
(1..5).sum #=> 15%w(a b c).sum('') #=> "abc"
#empty?
方法已添加到 Dir
,File
和Pathname
。
Dir.empty?('path/to/some/dir') #=> trueFile.empty?('path/to/some/file') #=> truerequire 'pathname' # Needed to use Pathname classPathname.new('file-or-dir').empty? #=> true
在Ruby 2.3中,您会收到语法错误 如果您在条件中尝试了多次分配。 它已改为警告。
# 2.3 if (a,b = [1,2]) then 'yes' else 'no' end #=> SyntaxError: (irb):9: multiple assignment in conditional # 2.4 if (a,b = [1,2]) then 'yes' else 'no' end #=> warning: found = in conditional, should be == #=> 'yes' if (a,b = nil) then 'yes' else 'no' end #=> warning: found = in conditional, should be == #=> 'no'
到此,相信大家对“Ruby 2.4有什么新特征”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。