Настройки текста:
«Конец моим страданиям и разочарованиям»Из песенки Вини-Пуха.
● def myFunction(a, b)
● a + b
● end
● puts myFunction(1, 2)
напечатает 3.
● Условия and и or возвращают элемент, эквивалентный true или первый элемент Например:
● puts 5 or 10 > 5
● puts 10 or nil > 10
● puts nil or 7 > 7
● puts nil and 10 > nil
Внимание программистам на C и производных: пустая строка и ноль не расцениваются как false. false — это только nil (null).
$ emerge ruby
Далее можно переходить к установке дополнительных модулей или к первым программам на Ruby.
$ emerge -s ruby
Кстати, если вы регулярно обновляете Portage, то, возможно, mod_ruby можно уже установить через "emerge mod_ruby". В моей версии его статус еще Masked.
mod_ruby
modruby.net — сайт Apache модуля mod_ruby. Установка крайне проста:
$ tar -xzf mod_ruby-1.0.7.tar.gz
$ cd mod_ruby-1.0.7
$./configure.rb --with-apxs=/path/to/apxs
$ make
$ make install
Затем редактируем файл настроек apache (httpd.conf или apache.conf) и добавляем в него следующее:
# загрузка модуля mod_ruby
LoadModule ruby_module /usr/lib/apache/mod_ruby.so
AddModule mod_ruby.c
# Настройка обработчиков для файлов *.rbx
<IfModule mod_ruby.c>
RubyRequire apache/ruby-run
<Location /ruby>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
Options +ExecCGI
</Location>
<Files *.rbx>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
Options +ExecCGI
</Files>
</IfModule>
Примечание: это немного расходится с примером, указанным в документации, но именно так у меня получилось запустить Ruby скрипты.
Для тестирования создайте в директории public_html файл hello.rbx вида
puts "Hello!"
Обращаемся к нему по ссылке (у вас может быть другая ссылка) "http://localhost/~alex/hello.rbx". Если отработало, значит все получилось. Если нет, обращайтесь, поможем, чем сможем.
Установка книги "Programming Ruby: The Pragmatic Programmers' Guide"
Авторы: Dave Thomas и Andrew Hunt
$ emerge dev-ruby/programming-ruby
Примечание: новая редакция книги находится на сайте phrogz.net
MySQL расширение для Ruby
$ emerge dev-ruby/mysql-ruby
C: \>ruby --help
if 1 > b
#…
elsif a == 1
#…
else
#…
end
if 1 > b then 1 else 2 end
case node.type
when node.DocumentNode then
#…
else
#…
end
a = 1 if a > 1
i = 1
while i < 10
puts i += 1
end
i = 1
puts i += 1 while i < 10
10.times { puts "I will use Google before asking questions\n" }
1.upto(3) { |i| puts "Iteration #{i}\n" }
10.downto(1) {|i| puts i}
(1..10). each {|i| puts i}
0.step(100, 10) {|i| puts i}
['January 1', 'February 23', 'March 8'].each { |holiday| p holiday }
%w{this is a test}.each{|i| p i}
0..1 # 0, 1
0…4 # 0, 1, 2, 3
'a'..'f' # 'a', 'b', 'c', 'd', 'e', 'f'
(0..4).to_a # Result: [0, 1, 2, 3, 4]
(0..9).include?(5) или (0..9) === 5
(0..9).min
(0..9).max
str = 'asdf #{10**5}' # без вычисления
str = "asdf #{10**5}" # с вычислением, str = 'asdf 100000'
"asdf".length
"asdf".index("s")
"asdf g h jkl;".split(" ")
"10 11 12".scan(/\d+/)
'Ruby??'.sub(/\?/, '!') > Ruby!?
'Ruby??'.sub(/(\?)\?/, '\1!') > Ruby?!
'Ruby??'.gsub(/\?/, '!') > Ruby!!
"10".to_i
'-=' * 10 # -=-=-=-=-=-=-=-=-=-=
"asdf" = %Q/asdf/
'asdf' = %q/asdf/ (вместо / может использоваться любой символ, например ~ -> %q~asdf~)
str = <<END
Некоторый текст
END
s, t = 2, 0
(1..64). each { t += s *= 2}
puts t # Результат: 73786976294838206460
Некоторые интересные возможности:
-10.abs — модуль
0xAAFF — hex
0b10010 — binary
?z — код символа
?\C-a — код Ctrl+a (?a & 0x9f)
?\M-a — код Alt+a (?a | 0x80)
?\C-\M-a — код Ctrl+Alt+a
Float object соответствует системному double
без модификатора — видима в текущем блоке и в подблоках
$ — глобальная
@ — переменная класса
@@ — статическая переменная класса
Первая буква заглавная — константа или имя класса
a = []
a = Array.new
a = ["asdf", "g", "h", "jkl;"]
a = %w{Ruby is a best language}
a = "Ruby is a best language".split(" ")
a = [1, 2, 3, 4, 5]
a[2, 2] # [3, 4]
a[1..3] # [2, 3, 4]
a[1…3] # [2, 3]
a = [1, 2, 3, 4, 5]
a[1,2] = [] # a = [1, 4, 5]
a[0,1] = 3 # a = [3, 4, 5]
a[0,1] = [1, 2, 3] # a = [1, 2, 3, 4, 5]
a.length # длина массива
a.shift # "вынуть" (вернуть и удалить) первый элемент
a.pop # "вынуть" последний элемент
h = {'hash' => '{}', 'array' => '[]'}
h['hash'] = "{'key' => 'value'}"
р.find { |item| item.name == 'hash' }
r = Regexp.new('/a(b)c/')
r = /a(b)c/
r = %r{a(b)c}
str = "Ruby is OOP language"
puts $1 if str =~ /(OOP)/
puts str unless str!~ /OOP/
$1..$9 — найденные группы
$& — текст, найденный по шаблону
$` — текст до шаблона
$' — текст после шаблона
m = /(a)(b)(c)/.match('abcdefg')
m[0] > $&
m[1] > $1
…
m.pre_match > $`
m.post_match > $'
def doSomething
yield
end
doSomething { puts "It is a something:-)" }
def doSomethingWithParams
yield 1
end
doSomethingWithParams do
|i| puts "It is a something with #{i}:-)"
end
if block_given?
yield
end
def doSomething(&callback)
callback.call
end
doSomething { print "This is a something" }
def doSomething(callback)
callback.call
end
doSomething proc { print "This is a something" }
p = proc {|i| print i}
(1..10).each &p
puts — выводит строку
print — выводит строку без \n в конце
printf — аналогичен C printf
gets — помещает результат ввода строки данных в переменную $_ и возвращает строку
def myMethod(value = "Default")
def myMethod(*args)
myMethod(*[1, 2])
myMethod('param2' => 1, 'param1' => 2)
конструктор
def initialize
MyClass.new
myClass.dup
myClass.freeze
myClass.inspect
myClass.to_s
super
attr_reader: documentUri
def documentUri=(documentUri)
@documentUri = documentUri
end
@@users
class Page
def Page.addHit
@@hit += 1
end
end
[public|protected|private]
def…
def…
или
private: myMethod1,myMethod2
private_class_method: new
class NodeList
def +(newNode)
#…
end
end
begin
#…
rescue ExceptionClass
#…
rescue ExceptionClass => e
#…
ensure
#…
end
аналогичен Java коду:
try {
//…
} catch (ExceptionClass) {
//…
} catch (ExceptionClass e) {
//…
} finaly {
//…
}
$!
raise
retry
catch (:exit) do
1..10.each do |i|
1..10.each do |j|
throw: exit if a[i, j] = 0
end
end
end
module MyFunctions
def…
end
class MyClass
include MyFunctions
end
`date`
class Fixnum
alias oldPlus +
def +(value)
oldPlus(value)
puts 'Plus called'
end
end
a, b = b, a
File: createToc.rb
#!/usr/bin/ruby — w
# createToc.rb
# Программа составляет оглавление, выводит его вместо CREATE_TOC
# и добавляет якоря вида <a name="sN"></a> к заголовкам
# задаем строковую переменную — идентификатор оглавления
tocToken = 'CREATE_TOC'
# определяем массив, в котором будет строиться оглавление
toc = []
# результат
output = ''
# для всех строк входного потока
ARGF.each do |line|
# если строка содержит заголовок 3го, 4го или 5го уровня
if line =~ %r{<h([3–5])>([^<]+)</h[3–5]>}
# определить номер якоря
anchorId = toc.length.to_s
# и добавить в массив toc пункт оглавления
toc << (' ' * ($1.to_i - 3) * 2) + "<a href=\"#a#{anchorId}\">#{$2}</a><br>\n"
# к строке output добавить заголовок с добавленым якорем
output << line.sub('>', "><a name=\"a#{anchorId}\"></a>")
else
output << line
end
end
# выводим результат, в котором tocToken заменяется на оглавление
puts output.sub(tocToken, '<div class="TOC">' + toc.join + '</div>')
К сожалению, эта программа не учитывает, что оглавление и якоря могут уже быть добавлены. Если добавите такую возможность к программе, присылайте патч.
Использование программы:
$ createToc.rb < article.html > new_article.html
10.05.2004
Последние комментарии
10 часов 41 минут назад
1 день 10 часов назад
3 дней 1 час назад
3 дней 1 час назад
3 дней 2 часов назад
3 дней 2 часов назад
3 дней 5 часов назад
4 дней 7 часов назад
5 дней 10 часов назад
5 дней 11 часов назад