Ruby is a dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write.
Ruby can be installed on many platforms (Linux, Mac, Windows and etc.). Here not lists how to install it.
Please refer to https://www.ruby-lang.org/en/downloads/ to install ruby on the platform you use.
If you are using Linux or Mac, I recommend you to install ruby through RVM (Ruby Version Manager).
"RVM is a command-line tool which allows you to easily install, manage, and work with multiple ruby environments from interpreters to sets of gems."
Install RVM with a Ruby:
$ \curl -sSL https://get.rvm.io | bash -s stable
$ irb
> name="world"
=> "world"
> puts "Hello #{name}"
Hello world
=> nil
> name=gets
Jeoygin
=> "Jeoygin\n"
> puts "Hello #{name}"
Jeoygin
=> nil
> puts 'Hello world'
Hello world
=> nil
> print 'Hello world'
Hello world=> nil
> profession=$stdin.gets
Engineer
=> "Engineer\n"
> $stdout.puts "I'm #{profession}"
I'm Engineer
=> nil
> $stderr.puts "This is error info"
This is error info
=> nil
> inp = $stdin.read
First line
Second line
Third line
Last line
Ctrl+D
=> "First line\nSecond line\nThird line\nLast line\n"
> ios = IO.new STDOUT.fileno
=> #<IO:fd 1>
> ios.write "Jeoygin\n"
Jeoygin
=> 8
> ios.close
=> nil
puts append "\n" at the end automatically.
redirect.rb
#!/usr/bin/ruby
$stdout = File.open "output.log", "a"
puts "Ruby"
puts "Java"
$stdout.close
$stdout = STDOUT
puts "Python"
> 8.class
=> Fixnum
> Fixnum.superclass
=> Integer
> "Hello".length
=> 5
> "Hello".index("l")
=> 2
> nil.nil?
=> true
> 8.methods
=> [:to_s, :inspect, :-@, :+, :-, :*, :/, :div, :%, :modulo, ...
:nil?, :=~, :protected_methods, :private_methods, :public_methods,
:instance_variables, :instance_of?, :is_a?, :equal?, :object_id, ...
]
> x = 4
> if x > 10
puts "Greater than 10"
elsif x < 0
puts "Less than 0"
else
puts "1..10"
end
1..10
=> nil
> puts 'This appears to be true.' if x == 4
This appears to be true.
=> nil
> puts 'This appears to be false.' unless x == 4
=> nil
> unless x == 4
puts 'This appears to be false.'
else
puts 'This appears to be true.'
end
This appears to be true.
=> nil
> x = 0
> x = x + 1 while x < 10
=> nil
> x
=> 10
> x = x - 1 until x == 1
=> nil
> x
=> 1
> while x < 10
x = x + 1
puts x
end
2
3
4
5
6
7
8
9
10
=> nil
> def hello(name = 'world')
puts "Hello #{name}"
end
=> nil
> hello
Hello world
=> nil
> hello 'Jeoygin'
Hello Jeoygin
=> nil
> arr = [8, 'blue', 1.414]
=> [8, "blue", 1.414]
> arr[0]
=> 8
> arr[-1]
=> 1.414
> arr[0..2]
=> [8, "blue", 1.414]
> arr[0...2]
=> [8, "blue"]
> (0..1).class
=> Range
> arr.push((1..3).to_a)
=> [8, "blue", 1.414, [1, 2, 3]]
> arr.pop
=> [1, 2, 3]
> arr.pop
=> 1.414
> arr[1] = nil
=> nil
> arr
=> [8, nil]
> arr = %w[blue red green yellow]
=> ["blue", "red", "green", "yellow"]
> empty1 = []
=> []
> empty2 = Array.new
=> []
> user = {
'name' => 'Jeoygin',
'age' => 'secret'
}
=> {"name"=>"Jeoygin", "age"=>"secret"}
> user['name']
=> "Jeoygin"
> user['hobby']
=> nil
> dict = Hash.new(0)
=> {}
> dict['key1']
=> 0
> dict['key1'] = dict['key1'] + 1
=> 1
> dict[:array] = [1, 2, 3]
=> [1, 2, 3]
dict
=> {"key1"=>1, :array=>[1, 2, 3]}
Local Var | Global Var | Instance Var | Class Var | Constants and Class Names |
---|---|---|---|---|
name | $ARGS | @name | @@NUM | NilClass |
arraySize | $Global | @credit_card | @@amount | PI |
x_axis | $config | @AGE | @@x_pos | Test_Module |
> 'string'.object_id
=> 70149202218820
> 'string'.object_id
=> 70149198469560
> :string.class
=> Symbol
> :string.object_id
=> 158248
> :string.object_id
=> 158248
> 8.class
=> Fixnum
> 8.class.superclass
=> Integer
> 8.class.superclass.superclass
=> Numeric
> 8.class.superclass.superclass.superclass
=> Object
> 8.class.superclass.superclass.superclass.superclass
=> BasicObject
8.class.superclass.superclass.superclass.superclass.superclass
=> nil
> Fixnum.class
=> Class
> Class.class
=> Class
> Class.superclass
=> Module
> Class.superclass.superclass
=> Object
> Module.class
=> Class
class User
attr_accessor :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
def hello()
puts "Hello #{first_name} #{last_name}"
end
end
> user = User.new('Jeoygin', 'Wang')
=> #<User:0x007f99c418a280 @first_name="Jeoygin", @last_name="Wang">
> user.hello
Hello Jeoygin Wang
=> nil
Ruby supports inheritance. But a class can only inherit from a single other class.
> class Admin < User
> end
=> nil
> admin = Admin.new('jeoygin', 'Wang')
=> #<Admin:0x000000013236a0 @first_name="Jeoygin", @last_name="Wang">
> admin.hello
Hello Jeoygin Wang
=> nil
module Hello
def hi
puts "Hello " + to_s
end
end
class Person
include Hello
attr_accessor :name
def initialize(name)
@name = name
end
def to_s
name
end
end
> Person.new('Jeoygin').hi
Hello Jeoygin
=> nil
> 3.times {puts "Hello"}
Hello
Hello
Hello
=> 3
> def threeTimes
yield
yield
yield
end
=> nil
> threeTimes {puts "Hello"}
Hello
Hello
Hello
=> nil
> def call_block(&block)
block.call
end
=> nil
> call_block {puts "Hello block"}
Hello block
=> nil
> line = 'Perl, zero or more other chars, then Python'
=> "Perl, zero or more other chars, then Python"
> puts "Scripting language mentioned: #{line}" if line =~ /Perl|python/
Scripting language mentioned: Perl, zero or more other chars, then Python
=> nil
> line.sub(/Perl/, 'Ruby')
=> "Ruby, zero or more other chars, then Python"
> 'Python, Python, Python'.gsub(/Python/, 'Ruby')
=> "Ruby, Ruby, Ruby"
class NilClass
def blank?
true
end
end
class String
def blank?
self.size == 0
end
end
> ["", "tiger", nil].each do |element|
puts element unless element.blank?
end
tiger
=> ["", "tiger", nil]
class Echo
def self.method_missing name, *args
puts ([name] << args).join(' ')
end
end
> Echo.hello 'world'
hello world
=> nil
For Chinese developers, you know that.
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l