0
123
12345678901234567890



1_000_000_000     # Jeden miliard.


0377           # semkowa reprezentacja liczby 255.
0b1111_1111    # Binarna reprezentacja liczby 255.
0xFF           # Szesnastkowa reprezentacja liczby 255.



0.0
-3.14
6.02e23       # Oznacza 6.02  1023.
1_000_000.01  # Troszk wicej ni jeden milion.



[5/2, 5.0/2, 5/2.0]                     # Wynik = [2, 2.5, 2.5].
[5.0.div(2), 5.0.fdiv(2), 5.quo(2)]     # Wynik = [2, 2.5, Rational(5,2)].



x = 5%2                  # Wynik = 1, wynik dzielenia to 2, reszta z dzielenia to 1.
q, r = 10.divmod 3       # Wynik = [3, 1], wynik dzielenia to 3, reszta z dzielenia to 1.



x**4          # To samo, co x*x*x*x.
x**-1         # To samo, co 1/x.
x**(1/3.0)    # Pierwiastek szecienny z x.
x**(1/4)      # Ups! Dzielenie liczb cakowitych oznacza, e jest to x**0, czyli zawsze 1.
x**(1.0/4.0)  # Pierwiastek czwartego stopnia z x.



even = (x[0] == 0)  # Liczba jest parzysta, jeli najmniej znaczcy bit jest 0.


0.4 - 0.3 == 0.1    # W wikszoci implementacji zwraca warto false.


'To jest prosty litera acuchowy.'



'Tumaczymy ksiki wydawnictwa O\'Reilly.'



'Niniejszy litera acuchowy koczy si jednym ukonikiem: \\'
'Ten koczy si lewym ukonikiem i apostrofem: \\\''
'Dwa lewe ukoniki: \\\\'



'a\b' == 'a\\b'


'To jest dugi litera acuchowy \,
ktry zawiera lewy ukonik i znak nowego wiersza.'



message =
'Te trzy literay s '\
'poczone przez interpreter w jeden acuch. '\
'Powstay acuch nie zawiera adnych znakw nowego wiersza.'



"\t\" Ten cytat zaczyna si od tabulatora, a koczy znakiem nowego wiersza.\"\n"
"\\" # Jeden lewy ukonik.



"360 stopni=#{2*Math::PI} radianw" # "360 stopni=6.28318530717959 radianw".


$salutation = 'Witaj'      # Definicja zmiennej globalnej.
"#$salutation kolego"      # Uycie zmiennej globalnej w acuchu otoczonym podwjnymi cudzysowami.



"Mj numer telefonu #: 555-1234"      # Brak znaku specjalnego.
"Do interpolacji wyrae uywaj \#{"  # acuch #{ ukryty za pomoc lewego ukonika.



sprintf("pi wynosi okoo %.4f", Math::PI) # Zwraca "pi wynosi okoo 3.1416".



"pi wynosi okoo %.4f" % Math::PI # To samo co powyej.
"%s: %f" % ["pi", Math::PI]       # Tablica po prawej stronie dla wielu argumentw.



"Ten litera acuchowy
zajmuje dwa wiersze,\
mimo e zosta zapisany w trzech linijkach."



"Ten acuch ma trzy wiersze.\r\n" \
"Jest zapisany jako trzy ssiadujce ze sob literay\r\n" \
"oddzielone stumionymi znakami nowego wiersza.\r\n"



"\u00D7"       # => "": wiodcych zer nie mona opuci.
"\u20ac"       # => "": mae litery s rwnie dozwolone.




"\u{A5}"      # => "Y": to samo, co "\u00A5".
"\u{3C0}"     # Maa grecka litera pi: to samo, co "\u03C0".
"\u{10ffff}"  # Najwikszy punkt kodowy Unicode.




money = "\u{20AC A3 A5}"  # => "LY"



money = "\u{20AC 20 A3 20 A5}"  # => " L Y"



%q(Nie trzeba przejmowa si zastpowaniem znakw '!)
%Q|"Co sycha", spyta|
%-Ten litera acuchowy koczy si znakiem nowego wiersza\n-  # Pominito Q.



%q_Ten litera acuchowy zawiera \_znaki podkrelenia\__
%Q!Wystarczy uy _innego ogranicznika\!!



# W XML uywane s pary nawiasw ktowych:
%<<book><title>Ruby in a Nutshell</title></book>>             # To dziaa.
# Wyraenia znajduj si w nawiasach:
%((1+(2*3)) = #{(1+(2*3))})                                   # To take dziaa.
%(Nawias bez pary \( musi by zastpiony sekwencj specjaln) # Tutaj potrzebny jest lewy ukonik.



document = <<HERE        # Pocztek dokumentu miejscowego.
Litera ancuchowy.
Skada si z dwch linijek, ktre nagle si kocz...
HERE



greeting = <<HERE + <<THERE + "drogi"
Witaj
HERE
kolego
THERE



empty = <<END
END



document = <<'TO JEST KONIEC DROGI PRZYJACIELU, TO JEST KONIEC'
    .
    . Duo tekstu
    . bez adnych sekwencji specjalnych.
    .
TO JEST KONIEC DROGI PRZYJACIELU, TO JEST KONIEC



document = <<-"# # #"    # To jest jedyne miejsce, gdzie mona umieci komentarz.
<html><head><title>#{title}</title></head>
<body>
<h1>#{title}</h1>
#{body}
</body>
</html>
               # # #
`ls`



%x[ls]



interpolowa dowolne wyraenie Ruby. Na przykad:
if windows
  listcmd = 'dir'
else
  listcmd = 'ls'
end
listing = `#{listcmd}`



listing = Kernel.`(listcmd)



10.times { puts "test".object_id }



?A   # Litera znakowy znaku ASCII A.
?"   # Litera znakowy znaku podwjnego cudzysowu.
??   # Litera znakowy znaku zapytania.



?\u20AC == ?    # => true: Tylko Ruby 1.9.
? == "\u20AC"   # => true.



?\t      # Litera acuchowy znaku tabulatora.
?\C-x    # Litera znakowy Ctrl-X.
?\111    # Litera znaku, ktrego kod to 0111 (semkowy).



planet = "Ziemia"
"Witajcie na planecie" + " " + planet    # Zwraca acuch "Witajcie na planecie Ziemia.".



"Witajcie na planecie #" + planet_number.to_s  # Metoda to_s konwertuje na acuch.



"Witajcie na planecie #" + planet_number.to_s  # Metoda to_s konwertuje na acuch.



"Witajcie na planecie ##{planet_number}"

greeting = "Witaj"
greeting << " " << "wiecie"
puts greeting   # Drukuje "Witaj wiecie".



alphabet = "A"
alphabet << ?B   # Teraz alfabet zawiera litery "AB".
alphabet << 67   # A teraz "ABC".
alphabet << 256  # Bd w Ruby 1.8: kody musz nalee do przedziau od 0 (wcznie) do 256.



ellipsis = '.'*3    # Zwraca warto '...'.



a = 0;
"#{a=a+1} " * 3   # Zwraca "1 1 1 ", a nie "1 2 3 ".



s = 'hello';   # Ruby 1.8.
s[0]           # 104: kod ASCII pierwszej litery 'h'.
s[s.length-1]  # 111: kod ostatniej litery 'o'.
s[-1]          # 111: inny sposb dostpu do ostatniego znaku.
s[-2]          # 108: przedostatni znak.
s[-s.length]   # 104: inny sposb dostpu do pierwszego znaku.
s[s.length]    # nil: pod tym indeksem nie ma adnego znaku.



s = 'hello';   # Ruby 1.9.
s[0]           # 'h': pierwszy znak acucha jako acuch.
s[s.length-1]  # 'o': ostatni znak 'o'.
s[-1]          # 'o': inny sposb dostpu do ostatniego znaku.
s[-2]          # 'l': przedostatni znak.
s[-s.length]   # 'h': inny sposb na dostp do pierwszego znaku.
s[s.length]    # nil: pod tym indeksem nie ma adnego znaku.



s[0] = ?H        # Zamiana pierwszego znaku na H.
s[-1] = ?O       # Zamiana ostatniego znaku na O.
s[s.length] = ?! # Bd! Nie mona wykona operacji przypisania poza acuchem.



s = "hello"      # Witamy si.
s[-1] = ""       # Usuwamy ostatni znak. acuch s to teraz "hell".
s[-1] = "p!"     # Zmieniamy ostatni znak i jeden dodajemy. acuch s to teraz "help!".



s = "hello"
s[0,2]          # "he".
s[-1,1]         # "o": zwraca acuch, nie kod znaku ?o.
s[0,0]          # "": podacuch o dugoci zero jest zawsze pusty.
s[0,10]         # "hello": zwraca wszystkie dostpne znaki.
s[s.length,1]   # "": bezporednio za kocem jest pusty acuch.
s[s.length+1,1] # nil: odczyt za tym miejscem jest bdem.
s[0,-1]         # nil: ujemne dugoci s pozbawione sensu.



s = "hello"
s[0,1] = "H"              # Zamiana pierwszej litery na wielk.
s[s.length,0] = " world"  # Dodanie sowa na kocu acucha.
s[5,0] = ","              # Wstawienie przecinka bez usuwania czegokolwiek.
s[5,6] = ""               # Usunicie bez wstawiania; s == "Hellod".



s = "hello"
s[2..3]           # "ll": znaki numer 2 i 3.
s[-3..-1]         # "llo": ujemne indeksy take dziaaj.
s[0..0]           # "h": zakres jednoznakowy.
s[0...0]          # "": pusty zakres.
s[2..1]           # "": kolejny pusty zakres.
s[7..10]          # nil: zakres poza granicami acucha.
s[-2..-1] = "p!"     # Zamiana: s zamienia si na "help!".
s[0...0] = "Please " # Wstawianie: s zamienia si na "Please help!".
s[6..10] = ""        # Usuwanie: s zamienia si na "Please!".



s = "hello"       # Na pocztku mamy acuch "hello".
while(s["l"])     # Kade wystpienie podacucha "l"
  s["l"] = "L";   # zastpowane jest acuchem "L".
end               # Powsta acuch "heLLo".



s[/[aeiouy]/] = '*'      # Zastpienie pierwszej samogoski gwiazdk.



s = "Y1000"
s.each_char {|x| print "#{x} " }         # Drukuje "Y 1 0 0 0". Ruby 1.9.
0.upto(s.size-1) {|i| print "#{s[i]} "}  # Powolna w przypadku wielobajtowych znakw.



# -*- coding: utf-8 -*-   # Znaki UTF-8 Unicode.
# Litera acuchowy zawierajcy wielobajtowy znak mnoenia.
s = "22=4"
# acuch skada si z szeciu bajtw kodujcych pi znakw.
s.bytesize                                     # => 6.
s.bytesize.times {|i| print s.getbyte(i), " "} # Wywietla "50 195 151 50 61 52".
s.length                                       # => 5.
s.length.times { |i| print s[i], " "}          # Wywietla "2 × 2 = 4".
s.setbyte(5, s.getbyte(5)+1);                  # s ma teraz warto "2×2=5".



# -*- coding: utf-8 -*-
s = "22=4"     # Zauwa wielobajtowy znak mnoenia.
s.encoding      # => <Encoding: UTF-8>
t = "2+2=4"     # Wszystkie znaki mieszcz si w podzbiorze ASCII UTF-8.
t.encoding      # => <Encoding: ASCII-8BIT>.



text = stream.readline.force_encoding("utf-8")
bytes = text.dup.force_encoding(nil)   # Kodowanie nil oznacza binarne.



s = "\xa4".force_encoding("utf-8")  # To nie jest prawidowy acuch UTF-8.
s.valid_encoding?                   # => false.



# -*- coding: utf-8 -*-
euro1 = "\u20AC"                     # Na pocztku jest znak Unicode Euro.
puts euro1                           # Drukuje "".
euro1.encoding                       # => <Encoding:UTF-8>
euro1.bytesize                       # => 3.
euro2 = euro1.encode("iso-8859-15")  # Zmiana kodowania na Latin-15.
puts euro2.inspect                   # Drukuje "\xA4".
euro2.encoding                       # => <Encoding:iso-8859-15>.
euro2.bytesize                       # => 1.
euro3 = euro2.encode("utf-8")        # Zmiana kodowania z powrotem na UTF-8.
euro1 == euro3                       # => true.



# Interpretacja bajtu jako punkt kodowy iso-8859-15 i zmiana kodowania na UTF-8.
byte = "\xA4"
char = byte.encode("utf-8", "iso-8859-15")



text = bytes.encode(to, from)
text = bytes.dup.force_encoding(from).encode(to)



# W zestawie iso-8859-1 nie ma znaku Euro, a wic kod ten spowoduje wyjtek.
"\u20AC".encode("iso-8859-1")



Encoding::ASCII_8BIT     # Take ::BINARY.
Encoding::UTF_8          # Znaki Unicode zakodowane w UTF-8.
Encoding::EUC_JP         # Japoskie znaki EUC.
Encoding::SHIFT_JIS      # Japoskie: take ::SJIS, ::WINDOWS_31J, ::CP932.


encoding = Encoding.find("utf-8")
$KCODE = "u"        # Okrel kodowanie UTF-8 lub uruchom Ruby z opcj -Ku.
require "jcode"     # Zaadowanie obsugi znakw wielobajtowych.
mb = "2\303\2272=4" # acuch "22=4" ze znakiem mnoenia Unicode.
mb.length           # => 6: ten acuch skada si z szeciu bajtw,
mb.jlength          # => 5: ale tylko piciu liter.
mb.mbchar?          # => 1: pooenie pierwszego znaku wielobajtowego lub nil.
mb.each_byte do |c| # Iteracja przez bajty acucha.
  print c, " "      # c jest typu Fixnum.
end                 # Drukuje "50 195 151 50 61 52 ".
mb.each_char do |c| # Iteracja przez znaki acucha.
  print c, " "      # c jest acuchem z jlength 1.
end                 # Drukuje "2  2 = 4 ".



[1, 2, 3]         # Tablica przechowujca trzy obiekty typu Fixnum.
[-10...0, 0..10,] # Tablica dwch zakresw. Dozwolone jest stosowanie przecinka na kocu.
[[1,2],[3,4],[5]] # Tablica tablic.
[x+y, x-y, x*y]   # Elementy tablicy mog by dowolnymi wyraeniami.
[]                # Pusta tablica ma rozmiar 0.



words = %w[to jest test]    # To samo, co: ['to', 'jest', 'test'].
open = %w| ( [ { < |        # To samo, co: ['(', '[', '{', '<'].
white = %W(\s \t \r \n)     # To samo, co: ["\s", "\t", "\r", "\n"].


empty = Array.new       # []: zwraca now pust tablic.
nils = Array.new(3)     # [nil, nil, nil]: nowa tablica z trzema elementami nil.
zeros = Array.new(4, 0) # [0, 0, 0, 0]: nowa tablica z czterema elementami 0.
copy = Array.new(nils)  # Utworzenie nowej kopii istniejcej tablicy.
count = Array.new(3) {|i| i+1}  # [1,2,3]: Trzy elementy obliczone z indeksu.



a = [0, 1, 4, 9, 16]   # Tablica przechowujca potgi kwadratowe indeksw.
a[0]        # Pierwszy element ma warto 0.
a[-1]       # Ostatni element ma warto 16.
a[-2]       # Przedostatni element ma warto 9.
a[a.size-1] # Inny sposb na sprawdzenie wartoci ostatniego elementu.
a[-a.size]  # Inny sposb na sprawdzenie wartoci pierwszego elementu.
a[8]        # Sprawdzenie wartoci poza tablic zwraca warto nil.
a[-8]       # Sprawdzenie wartoci przed tablic rwnie zwraca warto nil.



a[0] = "zero"   # a wynosi ["zero", 1, 4, 9, 16].
a[-1] = 1..16   # a wynosi ["zero", 1, 4, 9, 1..16].
a[8] = 64       # a wynosi ["zero", 1, 4, 9, 1..16, nil, nil, nil, 64].
a[-10] = 100    # Bd: nie mona wykona przypisania przed pocztkiem tablicy.



a = ('a'..'e').to_a   # Zakres przekonwertowany na ['a', 'b', 'c', 'd', 'e'].
a[0,0]                # []: niniejsza podtablica ma zero elementw.
a[1,1]                # ['b']: tablica jednoelementowa.
a[-2,2]               # ['d','e']: dwa ostatnie elementy tablicy.
a[0..2]               # ['a', 'b', 'c']: trzy pierwsze elementy.
a[-2..-1]             # ['d','e']: dwa ostatnie elementy tablicy.
a[0...-1]             # ['a', 'b', 'c', 'd']: wszystkie elementy oprcz ostatniego.



a[0,2] = ['A', 'B']      # Tablica a zawiera elementy ['A', 'B', 'c', 'd', 'e'].
a[2...5]=['C', 'D', 'E'] # Tablica a zawiera elementy ['A', 'B', 'C', 'D', 'E'].
a[0,0] = [1,2,3]         # Wstawienie elementw na pocztku tablicy a.
a[0..2] = []             # Usunicie tych elementw.
a[-1,1] = ['Z']          # Zamiana ostatniego elementu na inny.
a[-1,1] = 'Z'            # W przypadku pojedynczych elementw tablica jest rozwizaniem opcjonalnym.
a[-2,2] = nil  # Usunicie dwch ostatnich elementw w Ruby 1.8. Zastpienie wartociami nil w 1.9.



a = [1, 2, 3] + [4, 5]    # [1, 2, 3, 4, 5].
a = a + [[6, 7, 8]]       # [1, 2, 3, 4, 5, [6, 7, 8]].
a = a + 9                 # Bd: po prawej stronie musi by tablica.



a = []         # Na pocztku tablica jest pusta.
a << 1         # Tablica a = [1].
a << 2 << 3    # Tablica a = [1, 2, 3].
a << [4,5,6]   # Tablica a = [1, 2, 3, [4, 5, 6]].
a.concat [7,8] # Tablica a = [1, 2, 3, [4, 5, 6], 7, 8].


['a', 'b', 'c', 'b', 'a'] - ['b', 'c', 'd']    # ['a', 'a'].


a = [0] * 8    # [0, 0, 0, 0, 0, 0, 0, 0].



a = [1, 1, 2, 2, 3, 3, 4]
b = [5, 5, 4, 4, 3, 3, 2]
a | b    # [1, 2, 3, 4, 5]: duplikaty s usuwane.
b | a    # [5, 4, 3, 2, 1]: te same elementy, tylko w innej kolejnoci.
a & b    # [2, 3, 4].
b & a    # [4, 3, 2].



a = ('A'..'Z').to_a    # Na pocztku jest tablica liter.
a.each {|x| print x }  # Wydruk alfabetu po jednej literze.



# Niniejsza tablica asocjacyjna kojarzy nazwy cyfr z cyframi.
numbers = Hash.new     # Utworzenie nowego pustego obiektu typu Hash.
numbers["jeden"] = 1   # Powizanie acucha jeden z obiektem typu Fixnum 1.
numbers["dwa"] = 2     # Uycie notacji tablicowej.
numbers["trzy"] = 3
sum = numbers["jeden"] + numbers["dwa"]  # W ten sposb pobiera si wartoci.



numbers = { "jeden" => 1, "dwa" => 2, "trzy" => 3 }



numbers = { :jeden => 1, :dwa => 2, :trzy => 3 }



numbers = { :jeden, 1, :dwa, 2, :trzy, 3 } # To samo, ale trudniejsze do czytania.



numbers = { :one => 1, :two => 2, } # Dodatkowy przecinek jest ignorowany.



numbers = { jeden: 1, dwa: 2, trzy: 3 }



1..10      # Liczby cakowite od 1 do 10, wliczajc 10.
1.0...10.0 # Liczby pomidzy 1.0, a 10.0, wyczajc 10.0.


cold_war = 1945..1989
cold_war.include? birthdate.year



r = 'a'..'c'
r.each {|l| print "[#{l}]"}     # Drukuje "[a][b][c]".
r.step(2) { |l| print "[#{l}]"} # Drukuje "[a][c]".
r.to_a                          # => ['a','b','c']: Modu Enumerable udostpnia metod to_a.



1..3.to_a    # Wywouje metod to_a na rzecz liczby 3.
(1..3).to_a  # => [1,2,3].


begin <= x <= end


begin <= x < end


r = 0...100      # Zakres liczb cakowitych od 0 do 99.
r.member? 50     # => true: 50 naley do tego zakresu.
r.include? 100   # => false: 100 nie mieci si w tym zakresie.
r.include? 99.9  # => true: 99.9 to mniej ni 100.

triples = "AAA".."ZZZ"
triples.include? "ABC"        # true; szybka w 1.8, ale wolna w 1.9.
triples.include? "ABCD"       # true w 1.8, false w 1.9.
triples.cover?   "ABCD"       # true i szybka w 1.9.
triples.to_a.include? "ABCD"  # false i wolna w 1.8 i 1.9.

:symbol                   # Litera symbolu.
:"symbol"                 # Ten sam litera.
:'another long symbol'    # Cudzysowy pozwalaj na tworzenie symboli ze spacjami.
s = "string"
sym = :"#{s}"             # Symbol :string.

%s["]     # Tak samo jak :'"'.

o.respond_to? :each

name = :size
if o.respond_to? name
  o.send(name)
end

str = "string"     # Na pocztku jest acuch.
sym = str.intern   # Konwersja na symbol.
sym = str.to_sym   # Inny sposb na zrobienie tego samego.
str = sym.to_s     # Konwersja z powrotem na acuch.
str = sym.id2name  # Inny sposb na zrobienie tego samego.

o == nil   # Czy o ma warto nil?
o.nil?     # Inny sposb sprawdzenia.

s = "Ruby" # Utworzenie obiektu klasy String. Zapisanie referencji do niego w zmiennej s.
t = s      # Skopiowanie referencji do zmiennej t. s i t wskazuj ten sam obiekt.
t[-1] = "" # Modyfikacja obiektu poprzez referencj t.
print s    # Dostp do zmodyfikowanego obiektu przez referencj s. Drukuje "Rub".
t = "Java" # t wskazuje teraz inny obiekt.
print s,t  # Drukuje "RubJava".

myObject = myClass.new

o = "test"  # To jest warto.
o.class     # Zwraca obiekt reprezentujcy klas String.

o.class                       # String: o jest obiektem klasy String.
o.class.superclass            # Object: nadklas klasy String jest klasa Object.
o.class.superclass.superclass # nil: klasa Object nie ma nadklasy.

# Ruby 1.9 only
Object.superclass             # BasicObject: klasa Object ma nadklas w Ruby 1.9.
BasicObject.superclass        # nil: klasa BasicObject nie ma nadklasy.

o.class == String       # true, jeli o naley do klasy String.

o.instance_of? String   # true, jeli o naley do klasy String.

x = 1                    # Warto, ktra bdzie przetwarzana.
x.instance_of? Fixnum    # true: egzemplarz klasy Fixnum.
x.instance_of? Numeric   # false: metoda instance_of? nie sprawdza w gb hierarchii.
x.is_a? Fixnum           # true: x naley do klasy Fixnum.
x.is_a? Integer          # true: x naley do klasy Integer.
x.is_a? Numeric          # true: x naley do klasy Numeric.
x.is_a? Comparable       # true: dziaa take z moduami domieszkowymi.
x.is_a? Object           # true dla kadej wartoci x.

Numeric === x            # true: x jest Numeric.

o.respond_to? :"<<"  # true, jeli o posiada operator <<.

o.respond_to? :"<<" and not o.is_a? Numeric

a = "Ruby"       # Jedna referencja do jednego obiektu klasy String.
b = c = "Ruby"   # Dwie referencje do innego obiektu klasy String.
a.equal?(b)      # false: a i b s rnymi obiektami.
b.equal?(c)      # true: b i c odwouj si do tego samego obiektu.

a.object_id == b.object_id   # Dziaa jak wywoanie a.equal?(b).

a = "Ruby"    # Obiekt klasy String.
b = "Ruby"    # Inny obiekt klasy String z tak sam treci.
a.equal?(b)   # false: a i b nie odwouj si do tego samego obiektu.
a == b        # true: ale oba te odrbne obiekty maj identyczne wartoci.

1 == 1.0    # true: obiekty Fixnum i Float mog by rwne,
1.eql?(1.0) # false: ale nie wedug metody eql!

(1..10) === 5    # true: 5 naley do zakresu 1..10.
/\d+/ === "123"  # true: acuch pasuje do wyraenia regularnego.
String === "s"   # true: "s" jest egzemplarzem klasy String.
:s === "s"       # true w Ruby 1.9.

1 <=> 5     # -1.
5 <=> 5     # 0.
9 <=> 5     # 1.
"1" <=> 5   # nil: nie mona porwnywa liczb cakowitych i acuchw.

<    operator mniejszoci
<=   mniejszy lub rwny
==   rwny
>=   wikszy lub rwny
>    operator wikszoci

1.between?(0,10)  # true: 0 <= 1 <= 10.

nan = 0.0/0.0;     # Wynik dzielenia zera przez zero nie jest liczb.
nan < 0            # false: to nie jest mniej ni zero.
nan > 0            # false: to nie jest wicej ni zero.
nan == 0           # false: to nie jest tyle samo co zero.
nan == nan         # false: to nie jest rwne nawet samo sobie!
nan.equal?(nan)    # To oczywicie jest prawd.

# Tylko Ruby 1.8.
e = Exception.new("Nie wyjtek")
msg = "Bd: " + e  # Konkatenacja acucha i wyjtku.

1.1.coerce(1)      # [1.0, 1.1]: Koercja z klasy Fixnum na Float.
require "rational" # Uycie liczb wymiernych.
r = Rational(1,3)  # Jedna trzecia jako liczba wymierna.
r.coerce(2)        # [Rational(2,1), Rational(1,3)]: Fixnum na Rational.

if x != nil   # Wyraenie "x != nil" zwraca do instrukcji if warto true lub false.
  puts x      # Drukuje x, jeli jest to warto zdefiniowana.
end

if x       # Jeli warto x nie jest nil,
  puts x   # zostanie wydrukowana.
end

def deepcopy(o)
  Marshal.load(Marshal.dump(o))
end

s = "ld"      # acuchy s obiektami modyfikowalnymi.
s.freeze       # Zamroenie acucha, aby by niemodyfikowalny.
s.frozen?      # true: obiekt zosta zamroony.
s.upcase!      # TypeError: nie mona zmodyfikowa zamroonego acucha.
s[0] = "mi"    # TypeError: nie mona zmodyfikowa zamroonego acucha.

s = "niezaufany"  # Domylnie obiekty nie s zanieczyszczone.
s.taint           # Oznaczenie niezaufanego obiektu jako zanieczyszczony.
s.tainted?        # true: obiekt jest zanieczyszczony.
s.upcase.tainted? # true: obiekty pochodne s zanieczyszczone.
s[3,4].tainted?   # true: podacuchy s zanieczyszczone.
