Ruby By Examples
A Wikibookian believes this page should be split into smaller pages with a narrower subtopic. You can help by splitting this big page into smaller ones. Please make sure to follow the naming policy. Dividing books into smaller sections can provide more focus and allow each one to do one thing well, which benefits everyone. |
A reader requests expansion of this book to include more material. You can help by adding new material (learn how) or ask for assistance in the reading room. |
The book is broken down into sections. Each section deals with a Ruby language theme, giving examples, from basic to advanced. A full list of Ruby methods can be found here.
Basics
editStrings
editExample-001: String Length
puts 'That is an object'.size # => prints 17
Example-002: Reversing
puts 'This is not a palindrome'.reverse # => prints 'emordnilap a ton si sihT'
Example-003: Single substitution
puts 'a banana'.sub('a', '*') # => prints '* banana'
Example-004: Global substitution
puts 'a banana'.gsub('a', '*') # => prints '* b*n*n*'
Numbers
editExample-001: Use the times method to run code over and over
5.times do
puts 'Loop' # => prints 'LoopLoopLoopLoopLoop'
end
Example-002: Calculating absolute value
puts -10.abs # => prints 10
Arrays
editExample-001
arr = [['0','0','0'],['0','$','0'],['0','0','0']]
puts arr[1][1]
Example-002
a = [1, 2, 3, 4].shuffle
a.each {|e| puts e}
Example-003
a = %w|this is a string array|
puts a.join(' ')
Example-004
a = (0..10).to_a
a.map! {|x| x**2}
a.each {|e| puts e} # 0, 1, 4, 9, 16...
Example-005
items = ['random', 3, Math::PI, 'items']
puts items.index(3) # 1
puts items.include?(Math::E) # false
Hashes
editbooks = {'978-0140449266' => 'The Count of Monte Cristo',
'978-0140439243' => 'The Man in the Iron Mask'
}
puts books['978-0140439243']
# The output is 'The Man In The Iron Mask'
more_books = {}
more_books['978-1593081485'] = 'The Three Musketeers'
Operators
edit:: (Scope Operator)
editExample-001
MR_COUNT = 0 # constant defined on main Object class
module Foo
MR_COUNT = 0
::MR_COUNT = 1 # set global count to 1
MR_COUNT = 2 # set local count to 2
end
puts MR_COUNT # this is the global constant
puts Foo::MR_COUNT # this is the local "Foo" constant
Example-002
CONST = ' out there'
class Inside_one
CONST = proc {' in there'}
def where_is_my_CONST
::CONST + ' inside one'
end
end
class Inside_two
CONST = ' inside two'
def where_is_my_CONST
CONST
end
end
puts Inside_one.new.where_is_my_CONST # out there inside one
puts Inside_two.new.where_is_my_CONST # inside two
puts Object::CONST + Inside_two::CONST # out there inside two
puts Inside_two::CONST + CONST # inside two out there
puts Inside_one::CONST # #<Proc:0xedfa98(irb):3> , reference to the procedure
puts Inside_one::CONST.call + Inside_two::CONST # in there inside two
[ ]
editExample-001
a = [1, 2, 3, 4] # array creation
puts a[0] # array indexing
puts a[-1] # same as a[a.length-1]
Example-002
s = 'a meaningless string'
puts s[10] # prints 'e'
Example-003
p = proc {|arg| puts 'You called me with ' + arg.to_s}
p['a string arg'] # same as proc.call
**
edit+ - ! ~
edit* / %
edit<< >>
edit&
edit| ^
edit> >= < <=
edit<=> == === != =~
edit&&
edit.. ...
edit= ( += -= )
editnot
editand or
editIntermediate
editModules and Procedures
editClasses and Methods
editNames, Variables, Constants and Symbols
editAdvanced
editActive record
editSockets
editExample-001
# daytimeserver.rb
puts'========================================='
require 'socket'
puts'== daytime server =='
# Open a socket to a local daytime server, read, and print.
print TCPSocket.open('129.6.15.28', 'daytime').read
puts'========================================='
Example-002
# socketmethods.rb
require 'socket'
mySocket = TCPSocket.new( 'www.wikibook.com', 80 )
puts'==================================='
# Returns information on this connection's peer socket as a struct
# sockaddr packed into a string.
strinfo = mySocket.getpeername
puts 'strinfo: '+strinfo
# Returns true if query returns numeric address not host name.
puts BasicSocket::do_not_reverse_lookup
puts'==================================='
# Returns information on s as a struct sockaddr packed into a string.
strinfo = mySocket.getsockname
puts 'strinfo: '+strinfo
puts'==================================='
# Gets the specified socket option.
optval = mySocket.getsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR)
puts 'optval: '+optval.inspect
optval = optval.unpack "i"
puts 'optval: '+optval.inspect
optval = mySocket.getsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER)
puts 'optval: '+optval.inspect
optval = optval.unpack "ii"
puts 'optval: '+optval.inspect
# Sets reverse_lookup status
BasicSocket::do_not_reverse_lookup=true
# Sets the specified socket option.
mySocket.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true)
optval = mySocket.getsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR)
puts 'optval: '+optval.inspect
optval = optval.unpack "i"
puts 'optval: '+optval.inspect
puts'==================================='
#
mySocket.shutdown(2) # 0 shuts down receiving, 1 sending, and 2 both.
puts 'mySocket: '+mySocket.inspect
puts'==================================='
# Returns true if query returns numeric address not host name.
puts BasicSocket::do_not_reverse_lookup
puts'==================================='