Вы сказали, что читаете книги, поэтому, вероятно, вам нужно следующее:
Читайте меньше, пишите больше .
Я тоже из Си, и многие концепции рубина были для меня совершенно чужды, и я до сих пор не понимаю их всех. Но вместо того, чтобы просто читать, я решил писать, и теперь у меня мало программ / скриптов и веб-страниц (даже довольно больших), и я очень люблю Ruby. Когда вы напишете, вы начнете «чувствовать» все эти концепции. Используйте irb
, чтобы проверить, что вы читаете из книг. Напишите несколько методов с блоками, даже если вы их не понимаете, и поиграйте с ними.
Чтобы понять Ruby и Rails, вы можете предпринять несколько шагов, например:
Теперь это даст вам хороший набор справочных материалов. Как и при изучении любого нового языка или фреймворка, часто самой большой проблемой является знание того, где находится информация. И когда вы сталкиваетесь с проблемой в приложении, которое вы создаете, вам не нужно ломать голову над вопросом Где я прочитал, видите, нашел ту информацию, которая мне нужна .
Следующий набор полезной информации - это то, что я бы назвал типом информации о приложениях и логистике. Это включает:
Надеюсь, что это поможет.
Вам действительно стоит прочитать приличную книгу по Ruby. Лучшая книга, которая также считается справочником в сообществе Ruby, - это книга PickAxe: http://www.pragprog.com/titles/ruby3/programming-ruby-1-9
Это третье издание Programming Ruby, охватывающее Ruby 1.9. Второе издание книги посвящено Ruby 1.8. Первое издание охватывает Ruby 1.6. Первое издание находится в свободном доступе в Интернете по адресу: http://www.ruby-doc.org/docs/ProgrammingRuby/
Чтение такой книги научит вас основам. Возможно, многое из того, что вы уже знаете, но поскольку вы задаете такие базовые вопросы, как: переменная (то, что начинается с «:», является буквальным, а не переменной) и @variable, я настоятельно рекомендую вам прочитать книгу.
Не пытайтесь изучать все одновременно. Сосредоточьте свои усилия и развивайте постепенно. Сведите к минимуму путаницу, выполняя следующие шаги по очереди:
Кстати, я лично не думаю, что Rails легко изучить (что в любом случае является субъективным вопросом). ИМХО, это требует значительного обучения, но как только вы преодолеете это, вы вполне можете почувствовать себя более продуктивным в веб-разработке. То есть вы можете найти Rails простым в использовании .
Некоторые общие советы:
irb
- ваш друг. Используйте его как можно чаще. В дополнение к другим ответам, данным до сих пор, вы, возможно, захотите изучить основы объектно-ориентированного программирования. Концепция "переменных экземпляра" очень важна в языке (например, Ruby), где все является объектом.
Затем, возможно, вы захотите заглянуть в функциональное программирование, где идея функций как значений нашла свои корни, и понять, что блок - это не более чем кусок кода, который может выполняться произвольно и с различными аргументами, но также может обращаться к переменным, определенным вне его, с помощью магии того, что называется "закрытием".
Википедия - неплохое место для начала; статьи объектно-ориентированное программирование и первоклассные функции введут эти понятия.
Может быть, вам стоит разбить некоторые из конкретных проблем на вопросы?
Например:
@variables являются переменными экземпляра объекта - значения являются локальными для конкретных экземпляров объекта и, следовательно, доступны из всех методов.
В PHP или C нет блоков, но я собираюсь здесь немного пояснить:
Вы можете мыслить блоками, как функции без имени, т.е.
my_array = [ 1,2] my_array.each {| параметр | print (параметр)} my_array.each do | параметр | print (parameter) end
массив #, каждый метод отправляет на каждой итерации параметр блоку,
в данном случае значение каждого элемента в массиве.
DEFinition of Array # each может быть:
def each (& block)
block.call (elem_of_the_array)
# блок поймает "elem_of_the_array" как аргумент "параметр"
end
в PHP, вы можете написать этот блок как функцию следующим образом:
function name_less_function (parameter) {
print (parameter);
} {{1} }
реальная концепция блоков - это процессы, исследуйте их.
Изучите объектно-ориентированное программирование, возможно, этот пост вам поможет => http://raflabs.com/blogs/silence-is-foo/2009/12/13/the-ruby-object-model/
Прочтите эти книги, а если у вас возникнут проблемы с пониманием концепции, спросите индивидуально.
Язык программирования ruby: http://oreilly.com/catalog/9780596516178
Путь Ruby: http://rubyhacker.com/toc.html
Ruby для Rails: http://www.manning.com/black
Я отвечу на вопрос № 2, так как два других туманны и, вероятно, им понадобится несколько глав
vars: Ruby vs C ++
@var similar to this->var
@@var similar to SomeClass::var (static)
$var similar to global in c
A: символ в ruby - это уникальный числовой идентификатор, интерпретатор преобразует все символы в вашей программе в уникальные целые числа. Они полезны в качестве индексов (быстрее, чем строки и более читабельны, чем целые числа): hash [: user_name]
Как я могу узнать о блоках и как это может быть связано с концепциями из PHP / C?
Блоки можно рассматривать как лямбда-функции (как вы заметили, у вас есть Опыт Python), они в некотором роде анонимны.
@
Это локальная переменная экземпляра. Если бы вы использовали @@, вы получите переменную класса. Например, @@ number_of_all_created_classes и @my_var_that_is_for_this_instance_only
$
Это глобальная переменная.
:
А, меня за это будут кричать: это своего рода указатель. Оператор: позволяет использовать строковую ссылку для указания на объект.
«Волшебные концепции», такие как объявления записей на рельсах, что происходит за кулисами, когда я пишу has_one X
has_one, own_to и т. Д., Являются относительными функциями для перекрестных ссылок. Они не будут иметь отношения к C или PHP в этом отношении, но если вы выполнили серьезное программирование PHP / MySQL и выполнили какое-то сопоставление отношений, это возникнет. Возможно, вы захотите прочитать об ORM.
В настоящее время я читаю "Agile Web Development with Rails 2.0", и это здорово. Также руководство, написанное «Humble Little Ruby Book» мистера Соседства (доступно в Интернете) - это что-то быстрое и полезное для вас.
Я подумал, что отвечу на ваши вопросы более прямо.