Ruby ve Ruby 1.9 1.8 arasındaki fark nedir
"Ruby (1.8) sürümünü ve" "sürümü (1.9). yeni akım arasındaki farkları anlamış değilim Bir "" ya da bir "basit" farklılıkların açıklanması ve neden bu kadar farklı? kolay var
CEVAP
Sam Ruby cool slideshow that outline the differences vardır.
Özet gelecekte link ölü giderse, daha kolay başvuru için bu bilgileri ınline getiren faiz, burada Sam'in slaytlar genel bir bakış. Slayt inceleme için daha az ezici, ama hepsi bunun gibi bir liste ortaya koydu olması da yararlı olur.
Ruby 1.9 - Başlıca Özellikleri
- Performans
- İpler/Lifler
- /Unicode Kodlama
- taşlar (çoğunlukla) yerleşik artık
- ifadeleri Ruby kapsam sokmayın.
Ne değişti?
Tek karakter dizeleri.
Ruby 1.9
irb(main):001:0> ?c
=> "c"
Ruby 1.8.6
irb(main):001:0> ?c
=> 99
String dizin.
Ruby 1.9
irb(main):001:0> "cat"[1]
=> "a"
Ruby 1.8.6
irb(main):001:0> "cat"[1]
=> 97
{"bir","b"} Artık Desteklenmiyor
Ruby 1.9
irb(main):002:0> {1,2}
SyntaxError: (irb):2: syntax error, unexpected ',', expecting tASSOC
Ruby 1.8.6
irb(main):001:0> {1,2}
=> {1=>2}
Eylem:İçin {1 =>dönüştürme 2}
Array.to_s
Şimdi Noktalama İçerir
Ruby 1.9
irb(main):001:0> [1,2,3].to_s
=> "[1, 2, 3]"
Ruby 1.8.6
irb(main):001:0> [1,2,3].to_s
=> "123"
Eylem:Kullanın .yerine katılın
Kolon İfadeleri Artık Geçerli
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'
Ruby 1.8.6
irb(main):001:0> case 'a'; when /\w/: puts 'word'; end
word
Eylem:Daha sonra, noktalı virgül veya yeni satır
Değişkenler Yerel Değişkenler Gölge Bloğu
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
Ruby 1.8.6
irb(main):001:0> i=0; [1,2,3].each {|i|}; i
=> 3
Hash.index
Onaylanmadı
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
Ruby 1.8.6
irb(main):001:0> {1=>2}.index(2)
=> 1
Eylem:Karma Kullanın.anahtar
Fixnum.to_sym
Şimdi Gitti
Ruby 1.9
irb(main):001:0> 5.to_sym
NoMethodError: undefined method 'to_sym' for 5:Fixnum
Ruby 1.8.6
irb(main):001:0> 5.to_sym
=> nil
(Devamı) 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
Karma Anahtarları Şimdi Sırasız
Ruby 1.9
irb(main):001:0> {:a=>"a", :c=>"c", :b=>"b"}
=> {:a=>"a", :c=>"c", :b=>"b"}
Ruby 1.8.6
irb(main):001:0> {:a=>"a", :c=>"c", :b=>"b"}
=> {:a=>"a", :b=>"b", :c=>"c"}
Sipariş ekleme emirdir
Sıkı Unicode Düzenli İfadeler
Ruby 1.9
irb(main):001:0> /\x80/u
SyntaxError: (irb):2: invalid multibyte escape: /\x80/
Ruby 1.8.6
irb(main):001:0> /\x80/u
=> /\x80/u
tr
Regexp
Unicode Şimdi Anlıyorum
Ruby 1.9
unicode(string).tr(CP1252_DIFFERENCES, UNICODE_EQUIVALENT).
gsub(INVALID_XML_CHAR, REPLACEMENT_CHAR).
gsub(XML_PREDEFINED) {|c| PREDEFINED[c.ord]}
pack
unpack
Ruby 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
Daha Acımasız
Ruby 1.9
irb(main):001:0> class C < BasicObject; def f; Math::PI; end; end; C.new.f
NameError: uninitialized constant C::Math
Ruby 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
Eylem:::Kullanım Math::PI
Heyet Değiştirir
Ruby 1.9
irb(main):002:0> class C < SimpleDelegator; end
=> nil
irb(main):003:0> C.new('').class
=> String
Ruby 1.8.6
irb(main):002:0> class C < SimpleDelegator; end
=> nil
irb(main):003:0> C.new('').class
=> C
irb(main):004:0>
$KCODE Uyarılar Üretir
Ruby 1.9
irb(main):004:1> $KCODE = 'UTF8'
(irb):4: warning: variable $KCODE is no longer effective; ignored
=> "UTF8"
Ruby 1.8.6
irb(main):001:0> $KCODE = 'UTF8'
=> "UTF8"
instance_methods
Semboller bir Dizi Artık
Ruby 1.9
irb(main):001:0> {}.methods.sort.last
=> :zip
Ruby 1.8.6
irb(main):001:0> {}.methods.sort.last
=> "zip"
Eylem:İnstance_methods değiştirin.vardır? method_defined?
Kaynak Kodlama Dosya
Temel
# coding: utf-8
Emacs
# -*- encoding: utf-8 -*-
Mesele
#!/usr/local/rubybook/bin/ruby
# encoding: utf-8
Gerçek Diş Çekme
- Yarış Koşulları
- Örtülü Sipariş Varsayımlar
- Test Kodu
Yeni ne var?
Karma Anahtarlar gibi Sembol için alternatif Sözdizimi
Ruby 1.9
{a: b}
redirect_to action: show
Ruby 1.8.6
{:a => b}
redirect_to :action => show
Yerel Değişkenler Blok
Ruby 1.9
[1,2].each {|value; t| t=value*value}
Yöntem Enjekte
Ruby 1.9
[1,2].inject(: )
Ruby 1.8.6
[1,2].inject {|a,b| a b}
to_enum
Ruby 1.9
short_enum = [1, 2, 3].to_enum
long_enum = ('a'..'z').to_enum
loop do
puts "#{short_enum.next} #{long_enum.next}"
end
Herhangi bir engelleme? Numaralama!
Ruby 1.9
e = [1,2,3].each
Lambda Steno
Ruby 1.9
p = -> a,b,c {a b c}
puts p.(1,2,3)
puts p[1,2,3]
Ruby 1.8.6
p = lambda {|a,b,c| a b c}
puts p.call(1,2,3)
Karmaşık Sayılar
Ruby 1.9
Complex(3,4) == 3 4.im
Ondalık Hala Varsayılan Değildir
Ruby 1.9
irb(main):001:0> 1.2-1.1
=> 0.0999999999999999
“Özellikleri” . Düzenli
Ruby 1.9
/\p{Space}/
Ruby 1.8.6
/[:space:]/
Ortada çakılır
Ruby 1.9
def foo(first, *middle, last)
(->a, *b, c {p a-c}).(*5.downto(1))
Lifleri
Ruby 1.9
f = Fiber.new do
a,b = 0,1
Fiber.yield a
Fiber.yield b
loop do
a,b = b,a b
Fiber.yield b
end
end
10.times {puts f.resume}
Değerleri Ara
Ruby 1.9
match =
while line = gets
next if line =~ /^#/
break line if line.find('ruby')
end
“İç İçe Geçmiş” Yöntemleri
Ruby 1.9
def toggle
def toggle
"subsequent times"
end
"first time"
end
HTH!
Arasındaki fark vardır ve genişletmek ...
Require_relative arasındaki fark Ruby ...
İstisnalar Yetiştirme arasındaki fark ...
Ruby ve Ruby 1.9 1.8 arasındaki fark n...
Ruby Dizeleri gsub ve alt yöntemleri a...