SORU
22 AĞUSTOS 2008, Cuma


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
22 AĞUSTOS 2008, Cuma


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>

Defect 17700


$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!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boburnham

    boburnham

    11 Temmuz 2006
  • Eric Anthony

    Eric Anthony

    13 AĞUSTOS 2011
  • SignatureSeries

    SignatureSer

    24 Aralık 2006