Ответ 1
Все (кроме false
и nil
) оценивается true
в булевом контексте.
Это отличается от других языков, где пустые конструкции или 0
часто оцениваются как false
.
if 0
puts "0 evaluates to true"
end
Я новичок в этом языке, и мне нужно знать, какие вещи нужно абсолютно знать, чтобы создать полноценный веб-сайт или веб-приложение с использованием языка программирования Ruby?
В основном Ruby on Rails с Rake и другими инструментами, которые в основном используют Rake.
Обновление: я знаю много других языков, таких как С++, Java, PHP, Perl и т.д. и т.д.
Обновление 2: Это здорово... продолжайте приходить!
Все (кроме false
и nil
) оценивается true
в булевом контексте.
Это отличается от других языков, где пустые конструкции или 0
часто оцениваются как false
.
if 0
puts "0 evaluates to true"
end
Все - объект. Все.
Методы неявно возвращают результат последнего оператора.
def foo
"bar"
end
puts foo # outputs "bar"
return
, где вы хотите быть более явным.for
.symbols
вместо строк, потому что они эффективны, например. в хэш-ключахи т.д..
Строки изменяемы; Символов нет.
Ruby использует передачу сообщений, а не вызовы функций.
например,
# These are all the same:
5 + 3
5.+(3)
5.send(:+, 3)
Rack. Все современные веб-серверы и фреймворки Ruby используют протокол Rack. Хотя вы можете сделать веб-приложение Ruby без знания Rack, это даст вам хорошую основу, и это становится все более важным в веб-сообществе Ruby.
Стойка также может стать хорошей отправной точкой для обучения программированию веб-приложений в Ruby, поскольку вы можете начать с самого простого веб-приложения:
run lambda { |env| [200, {}, "hello world"] }
и вы можете продолжать строить оттуда. После того, как вы понимаете Rack, архитектурные решения в Sinatra, Rails и т.д. Имеют больше смысла.
Почти все - это выражение, которое возвращает значение. Это включает в себя те вещи, которые вы обычно не считаете выражениями, такими как определения классов - определение класса оценивается с последним выражением внутри него. Аналогично, if
и case
- это выражения, которые оценивают тот же результат, что и последнее выражение в той ветки, в которой была сделана ветка.
Точно то, что они оценивают, если не всегда сразу же очевидно, хотя: def
оценивает значение nil, но define_method
оценивает Proc, представляющий метод, который он определил. Это в сочетании с тем, что определение класса является выражением, иногда удивляет людей:
class A
define_method(:foo) {"hello"}
end
# => #<Proc:[email protected](irb):18> # NOT nil
class A
define_method(:bar) {"hello"}
FAVORITE_NUMBER = 80
end
# => 80
Если вызывается метод Ruby, о котором не известно, Ruby затем вызывается методом method_missing с подробностями.
class MyClass
def method_missing(method_name, *args)
puts "Method #{method_name} called with arguments #{args.join(', ')}"
end
end
my_instance = MyClass.new
my_instance.undefined_method(4, :blah) # => Method undefined_method called with arguments 4, blah
v 1.9 очень сильно отличается от v 1.8. Код, построенный для 1.8, НЕ гарантированно работает в 1.9, и наоборот.
У меня была целая куча кода, которая работала в версии 1.8, а не в версии 1.9, а затем приходилось иметь дело с двумя машинами, каждая из которых имела разные версии. Не весело.
Обязательно выберите версию (возможно, последнюю, но будьте осторожны, что много примеров кода в блогах в Интернете составляет 1,87, а также второе издание "Программирование Ruby". С тех пор было выпущено третий выпуск Programming Ruby, который охватывает 1.9, и тот, который вы хотите.
Кроме того, если вы вообще похожи на меня, вы будете петь одну из трех песен при программировании:
irb, pp, lp и ap - очень полезные волшебные слова!;)
Не злоупотребляйте патчем обезьян. Ruby упрощает работу, но это может повредить.
См. также Monkey-patching Vs. S.O.L.I.D. принципы?
A стоит прочитать: -
Топ-5 новых функций в Ruby 1.9
4. Лямбда-оператор
5.RubyGems и Rake объединяются с Ruby
ruby-debug - ваш друг. Я, вероятно, использую его больше, чем любой другой камень. Учитывая динамическую природу рубина, трудно точно знать, что делает конкретный фрагмент кода, просматривая текст в вашем редакторе. Просто бросьте "отладчик" перед ним и входите в него.
это также отличный способ узнать, откуда приходит динамически генерируемый метод.
Вы не можете перегружать operator=
так же, как на С++. Вы также не можете имитировать его каким-либо образом, что имеет смысл.
Я думаю, что люди освещали большинство основ. Вот некоторые продвинутые вещи:
inherited
, included
, class_eval
, instance_eval
и:
@a = "something"
class << @a
def moo
puts "moo"
end
end
@a.moo
@b = "something else"
@b.moo
eval
является злом. Никогда не используйте его, если вы действительно, действительно, действительно знаете, что делаете.
Если вы действительно знаете, как программировать, вы уже знаете самые важные вещи, чтобы знать о языке программирования Ruby. Просто следуйте за ними.
Остальное находится в стопке руководств; прочитайте их.
никто бы никогда не слышал об этом, если бы не Rails?