2010-03-11 70 views
5

我来自C,php和bash背景,很容易学习,因为它们都具有相同的C结构,我可以将其与我已知的相关联。这个C和PHP程序员如何学习Ruby和Rails?

然后2年前我学会了Python,并且我学得很好,Python比Ruby更容易学习。然后从去年开始,我试图学习Ruby,然后Rails,并且我承认,直到现在,我仍然无法得到它,具有讽刺意味的是,这些标签容易学习,但对于像我这样经验丰富的程序员来说,我只是不能将它与我以前学过的东西联系起来,我有两本关于Ruby和Rails的书,而当我读它时,没有什么会被吸收到我的脑海中,而我正在接近放弃......

在ruby中,我很难理解块的概念,为什么存在可以被其他函数访问的@变量,以及$ variable和:variable是做什么的?在Rails中,为什么会有像this_is_another_function_that_do_this这样的函数,因此ruby,它只是一个命名约定,或者它是用这个变量_can_do_this_function自动生成的。我仍然感到困惑,所有这些神奇的概念和事物都来自哪里?而现在,1年的努力,吸收,但仍然没有进展......

编辑: 总结:

  1. 我如何了解块,怎么能涉及到的概念来自PHP/C?
  2. 变量,什么是它的意思是当一个变量与前缀:
    • @
    • $
  3. “魔术概念”,suchs作为轨道记录的声明,是什么当我写在幕后发生has_one X

好吧,承受我的困惑,至少我“M诚实面对自己,现在超过一年,因为我第一次尝试学习Ruby和我不再年轻..

所以

I learned this in Bash/C/PHP 

solve_problem($problem) 
{ 
    if [ -e $problem == "trivial" ]; 
    then 
     write_solution(); 
    else 
     breakdown_problem_into_N_subproblems(\; 
     define_relationship_between_subproblems; 
     for i in $(command $each_subproblem); 
     do 
      solve_problem $i 
     done 
    fi 
} 

write_solution(problem) { 
    some_solution=$(command <parameters> "input" | command); 
    command | command $some_solution > output_solved_problem_to_file 
} 

breakdown_problem_into_N_subproblems($problems) { 
    for i in $problems; 
    do 
     command $i | command > i_can_output_a_file_right_away 
    done 
} 

define_relationship_between_subproblems($problems) { 
    if [ -e $problem == "relationship" ]; 
    then 
     relationship=$(command; command | command; command;) 
    elsif [ -e $problem == "another_relationship" ]; 
     relationship=$(command; command | command; command;) 
    fi 
} 


In C/PHP is something like this 

solve_problem(problem) 
{ 
    if (problem == trivial) write_solution; 
    else { 
     breakdown_problem_into_N_subproblems; 
     define_relationship_between_subproblems; 
     for (each_subproblem) solve_problems(subproblem); 
    } 
} 

而现在,我只是无法连接Ruby,| b | {blocks},使用@variables,变量和variables_with_this_things。

回答

6

你说,你正在阅读的书,所以也许你需要的是:

少读,多写

我也是来自C背景,很多ruby的概念对我来说完全是外星人,我仍然不能理解他们。但不是只读,我决定写,现在我有几个程序/脚本和网页(甚至相当大),我真的很喜欢红宝石。当你写作时,你会开始“感受”所有这些概念。使用irb测试您从书中读取的内容。即使你不理解它们并使用它,也要用块写一些方法。

1

也许你应该将一些特定的问题分解成问题?

例如:

@variables是对象的实例变量 - 值是本地的一个对象的特定实例,因此从所有的方法访问。

1

你真的应该读一本关于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,我真的希望你读一本书。

3

除了到目前为止给出的其他答案之外,您可能还想要学习基本的面向对象编程。 “实例变量”的概念在一切都是对象的语言(如Ruby)中非常重要。然后,你可能想要寻找函数式编程,其中函数作为值的想法找到它的根源,并意识到块只不过是一块可以任意和不同参数执行的代码块,但是,还可以通过称为“封闭”的东西来访问在其外部定义的变量。

维基百科不是一个不好的地方开始; object-oriented programmingfirst-class functions上的文章将会介绍这些概念。

3

了解Ruby和Rails有几个步骤,你可以采取措施,例如:

  • 阅读这是有据可查的Rails Guides并覆盖框架结构的要领和细节。试用包含的例子。
  • 有便利的Rails Framework文档,其中还包含许多页面的自述部分或标题部分中的大量信息。 找到当浏览文档中存储的所有信息时,浏览器的功能将成为您的朋友。这也可以通过学习如何使用gem服务器命令来启动本地工作站上的文档来补充。
  • Ruby API语言指南(Core和图书馆)

现在,这会给你一套良好的参考材料。就学习任何新的语言或框架而言,最大的问题是知道信息的位置。而当你在构建应用程序时遇到问题时,你不需要为这个问题摔跤我在哪里阅读,请参阅,找到那些我需要的信息

下一组有用的信息更多的是我称之为应用程序和物流信息的类型。这包括;

  • 阅读Programming Ruby指南,以便了解用于编写Rails框架的语言的基础知识。
  • 阅读Agile Web Development它不仅给你提供了对框架的深入了解,还让你了解了以非常敏捷的方式构建应用程序的过程。
  • 看看Advanced Rails Recipes,然后将扩展你的知识。
  • 了解附带的框架,如控制台宝石扩展
  • 最后找到一个小项目,或许真的在GitHub上,你可以查看代码的工具。它应该是一个不太大的应用程序,因此您不会陷入细节之中,但却具有足够的尺寸,以便您可以看到所有部件如何协同工作。

希望有帮助。

3

阅读这些书籍,并且当您无法独立地理解概念时,

Ruby编程语言:http://oreilly.com/catalog/9780596516178
Ruby之道:http://rubyhacker.com/toc.html
红宝石Rails的:http://www.manning.com/black

我会回答的问题没有2其他两个是模糊的,可能他们会需要几章
VARS:红宝石对C++

@var similar to this->var 
@@var similar to SomeClass::var (static) 
$var similar to global in c 

一个:符号在红宝石是一个唯一的数字标识符,解释器转换的所有符号在你的程序为独特的整数。他们是(不是整数比字符串更快,更可读的)有用指标:hash[:user_name]

+0

C没有全局性 – horseyguy 2010-03-11 12:24:33

+0

Thei're全球性在“外部”的意义上,许多脂肪酶称他们为“全球”。 http://en.wikipedia.org/wiki/Global_variable – clyfe 2010-03-11 15:10:54

+0

它有文件范围,当然,但不是'全球范围'。不能从其他翻译单元访问,例如 – horseyguy 2010-03-12 13:55:05

1

不要试图在同一时间学习一切。集中您的努力并逐步构建。通过在一个时间执行下列一个步骤最小化混淆:的面向对象编程

  1. Master中的[基本]概念。
  2. 掌握红宝石的基本概念和语法。现阶段甚至不用担心Rails。
  3. 掌握模型 - 视图 - 控制器(MVC)体系结构的[基本]概念。
  4. 可选)使用MVC框架,PHP建立的东西(如cakePHPCodeIgniter)。通过这种方式,您将看到MVC概念在行动中以及您已经知道的语言。
  5. Rails time!有很多关于Rails的书籍,指南,教程,播客和截屏视频,包括免费和付费。看看你最喜欢的类型的推荐资源,并用它来学习Rails。

在一个侧面说明,我个人不认为Rails的是易学(这是一个主观的问题,反正)。恕我直言,它有一个相当大的学习曲线,但一旦你克服它,你可以可能很好发现自己更高效的网页开发。也就是,你可能很好找Rails是易于使用

的一般提示:

  • 独自阅读是不够的,真正掌握一门编程语言/框架。你必须编写代码..很多代码。不要仅仅按照您选择的学习资源的示例应用程序。看看Project Euler和类似的网站,可能会有更多不同的挑战。
  • irb是你的朋友。尽可能多地使用它。
  • 如果你无法弄清楚什么,请搜索。如果仍然无法解决问题,请在Stack Overflow或Ruby Forum上发布问题。只是让你的问题具体。
  • 学习需要时间。不要感到沮丧,要轻松一点。
1
  1. 不要试图学习Rails,请先尝试学习Ruby。
  2. 有一个在PHP或C无块,但我要在这里解释一点点:

    您可以认为块就像名字少的功能,即。

     
         my_array = [1,2] 
         my_array.each { |parameter| print(parameter) } 
         my_array.each do |parameter| 
          print(parameter) 
         end 
        

    the Array#each method sends, on each iteration, a parameter to the block, 
        in this case is the value of each element on the array. 
    
        the DEFinition of Array#each could be: 
        <pre> 
         def each(&block) 
          block.call(elem_of_the_array) 
          #the block will catch "elem_of_the_array" as "parameter" argument 
         end 
        </pre> 
    
        in PHP you can write this block as function like this: 
        <pre> 
        function name_less_function(parameter){ 
         print(parameter); 
        } 
        </pre> 
    

    块背后的真正概念是特效,做研究它们。

  3. 学习面向对象编程,也许这篇文章可以帮助你=>http://raflabs.com/blogs/silence-is-foo/2009/12/13/the-ruby-object-model/

0

我如何了解块,以及如何 能不能从 PHP/C相关概念?

块可以被看作是lambda函数(正如你注意到你有一些Python体验),它们有点匿名。

@

这是一个本地实例变量。如果你使用@@,你会得到一个类的变量。对于即@@ number_of_all_created_classes和@my_var_that_is_for_this_instance_only

$

这是一个全局变量。

啊,人家会火焰我这个:这是怎样的一个指针。 :运算符允许您使用字符串引用来指向对象。

“魔术概念”,suchs作为轨道记录的声明,在幕后发生了什么,当我写HAS_ONE X

HAS_ONE,belongs_to的,等等,都是相对的职能交叉参考。它们不会涉及C或PHP,但是如果你已经完成了一些严格的PHP/MySQL编程并做了一些关系映射,它就会弹出来。您可能想了解ORM。

目前我在阅读“Agile Web Development with Rails 2.0”,这很棒。此外,由Neighborly's Humble Little Ruby Book(可在线获得)编写的指南是快速且适合您阅读的内容。

我想我会更直接地回答你的问题。