রুবির "বর্তমান" সংস্করণ এবং "নতুন" সংস্করণ (1.9) এর মধ্যে পার্থক্য সম্পর্কে আমি পরিষ্কার নই। পার্থক্যগুলির একটি "সহজ" বা "সাধারণ" ব্যাখ্যা আছে এবং কেন এটি এত আলাদা?
রুবির "বর্তমান" সংস্করণ এবং "নতুন" সংস্করণ (1.9) এর মধ্যে পার্থক্য সম্পর্কে আমি পরিষ্কার নই। পার্থক্যগুলির একটি "সহজ" বা "সাধারণ" ব্যাখ্যা আছে এবং কেন এটি এত আলাদা?
উত্তর:
স্যাম রুবির একটি দুর্দান্ত স্লাইডশো রয়েছে যা পার্থক্যের রূপরেখা দেয় ।
আরও সহজ রেফারেন্সের জন্য এই তথ্যটি ইনলাইন আনার স্বার্থে, এবং লিঙ্কটি যদি বিমূর্ত ভবিষ্যতে মারা যায়, স্যামের স্লাইডগুলির একটি ওভারভিউ এখানে। স্লাইডশোটি পর্যালোচনা করতে কম অপ্রতিরোধ্য, তবে এটির তালিকাগুলির মধ্যে এমনটি রাখাও সহায়ক।
রুবি ১.৯
irb(main):001:0> ?c
=> "c"
রুবি 1.8.6
irb(main):001:0> ?c
=> 99
রুবি ১.৯
irb(main):001:0> "cat"[1]
=> "a"
রুবি 1.8.6
irb(main):001:0> "cat"[1]
=> 97
রুবি ১.৯
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}
ক্রিয়া: {1 => 2 to এ রূপান্তর করুন
Array.to_s
এখন বিরামচিহ্ন ধারণ করেরুবি ১.৯
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"
ক্রিয়া: পরিবর্তে .জাইন ব্যবহার করুন
রুবি ১.৯
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
ক্রিয়া: সেমিকোলন, তারপরে বা নিউলাইন ব্যবহার করুন
রুবি ১.৯
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
অসমর্থিতরুবি ১.৯
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
ক্রিয়া: হ্যাশ.কি ব্যবহার করুন
Fixnum.to_sym
এখন গেছেরুবি ১.৯
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
(চালিয়ে যাওয়া) রুবি ১.৯
# 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
রুবি ১.৯
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"}
অর্ডার সন্নিবেশ আদেশ হয়
রুবি ১.৯
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
এবং Regexp
এখন ইউনিকোড বোঝারুবি ১.৯
unicode(string).tr(CP1252_DIFFERENCES, UNICODE_EQUIVALENT).
gsub(INVALID_XML_CHAR, REPLACEMENT_CHAR).
gsub(XML_PREDEFINED) {|c| PREDEFINED[c.ord]}
pack
এবং 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
রুবি ১.৯
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
ক্রিয়া: ব্যবহার :: গণিত :: পিআই
রুবি ১.৯
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>
রুবি ১.৯
irb(main):004:1> $KCODE = 'UTF8'
(irb):4: warning: variable $KCODE is no longer effective; ignored
=> "UTF8"
রুবি 1.8.6
irb(main):001:0> $KCODE = 'UTF8'
=> "UTF8"
instance_methods
এখন প্রতীক একটি অ্যারেরুবি ১.৯
irb(main):001:0> {}.methods.sort.last
=> :zip
রুবি 1.8.6
irb(main):001:0> {}.methods.sort.last
=> "zip"
ক্রিয়া: দৃষ্টান্ত_মাদিতগুলি প্রতিস্থাপন করুন? অন্তর্ভুক্ত করবেন? মেথড_ডাইফাইনড দিয়ে?
# coding: utf-8
# -*- encoding: utf-8 -*-
#!/usr/local/rubybook/bin/ruby
# encoding: utf-8
রুবি ১.৯
{a: b}
redirect_to action: show
রুবি 1.8.6
{:a => b}
redirect_to :action => show
রুবি ১.৯
[1,2].each {|value; t| t=value*value}
রুবি ১.৯
[1,2].inject(:+)
রুবি 1.8.6
[1,2].inject {|a,b| a+b}
to_enum
রুবি ১.৯
short_enum = [1, 2, 3].to_enum
long_enum = ('a'..'z').to_enum
loop do
puts "#{short_enum.next} #{long_enum.next}"
end
রুবি ১.৯
e = [1,2,3].each
রুবি ১.৯
p = -> a,b,c {a+b+c}
puts p.(1,2,3)
puts p[1,2,3]
রুবি 1.8.6
p = lambda {|a,b,c| a+b+c}
puts p.call(1,2,3)
রুবি ১.৯
Complex(3,4) == 3 + 4.im
রুবি ১.৯
irb(main):001:0> 1.2-1.1
=> 0.0999999999999999
রুবি ১.৯
/\p{Space}/
রুবি 1.8.6
/[:space:]/
রুবি ১.৯
def foo(first, *middle, last)
(->a, *b, c {p a-c}).(*5.downto(1))
রুবি ১.৯
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}
রুবি ১.৯
match =
while line = gets
next if line =~ /^#/
break line if line.find('ruby')
end
রুবি ১.৯
def toggle
def toggle
"subsequent times"
end
"first time"
end
আছে HTH!
অনেকেই এখন পিক্যাক্সের উপরে রুবি প্রোগ্রামিং ল্যাঙ্গুয়েজের প্রস্তাব দিচ্ছেন - আরও উল্লেখযোগ্য বিষয় হল এতে 1.8 / 1.9 পার্থক্যের সমস্ত বিবরণ রয়েছে।
আরও কিছু পরিবর্তন:
একটি স্প্ল্যাট সিঙ্গলটন অ্যারে ফিরিয়ে দেওয়া:
def function
return *[1]
end
a=function
অ্যারে আর্গুমেন্ট
def function(array)
array.each { |v| p v }
end
function "1"