学Ruby语法之前,要先弄明白一件事情,你并非是为了成为语言方面的专家才去学它,而是为了能够顺利读懂Rails项目的代码,为了能够在控制台里面快速去验证一些想法。在后面的几周时间里,你将会编写几十个模型,会编写上百个方法,要是现在不花费20分钟去弄清楚这些基础符号所代表的含义,到那个时候每一行代码都会让你陷入卡顿的情况。
三种运行方式对应不同场景
项目开展过程中最为常用的是Rails控制台,你进入项目目录键入rails c,整个项目的环境便被加载起来了,2025年Stack Overflow调查表明,67%的Rails开发者每日起码使用10次控制台,你在此处能够直接运用Post.new创建帖子,还能够检测User.find(1)是否会报错,更改完代码马上就能看到结果,退出时输入exit即可。
vagrant@vagrant-ubuntu-trusty-64:/vagrant/data_system$ rails c
Running via Spring preloader in process 2659
Loading development environment (Rails 5.1.6.1)
irb(main):001:0> puts "hello world"
hello world
=> nil
irb(main):002:0> exit
irb适宜于随手去尝试语法,比如说你忘掉了数组的map该如何使用,那就打开终端去敲irb,写上[1,2,3].map { |n| n * 2 },按下回车便能够看到[2,4,6]。这个工具在你电脑安装Ruby之际就已经自带了,2026年最新的Ruby 3.4.1同样是包含着它。使用完毕后通过exit退出,不会对项目代码造成影响。
xuzhaoning@xuchaoningdeMacBook-Air:~$ irb
2.2.1 :001 > puts "hello world"
hello world
=> nil
2.2.1 :002 > exit
想要运行.rb文件,保存是最为传统的编程途径。你在VS Code里写下puts “学习Ruby”,将其保存成test,前往终端,通过cd进入文件所在的文件夹,输入ruby test.rb,如此屏幕之上便会印出这句话。要留意路径必须正确,在2026年2月11日晚上19点这个特定时刻,全球依旧存在大量的Ruby教程运用这种方式去教导学员。
Ruby的面向对象其实很直观
对着对象的方向去聆听,听起来会觉得抽象,然而你每一天皆是在运用对象。你手中所握持的iPhone15这般事物是一个实例,它归属于iPhone这个类别范畴。在代码的领域当中也是如此这般,首先要去定义Car类,随后运用Car.new创造出car1,car1此般便是对象。类属于大的概念范畴,对象是具体实际存在的个体。
xuzhaoning@xuchaoningdeMacBook-Air:~$ ruby first_project.rb
#输出信息
hello world
刚入门的新手没必要非得纠结“对象到底是什么”这类哲学方面的问题,普林斯顿大学所著的《算法第四版》当中的第1.1节用了20页去讲述对象以及构造函数,不过那是供计算机专业的学生去钻研的,你当下的任务是先要学会运用Ruby编写Web功能,待做过三五个项目之后再回过头去看那本书,届时理解会全然不一样。
类和模块分工明确
#咱们要对“车”进行实例化,先创建一个类Car
class Car
end
#然后创建车这个对象
car1 = Car.new
类借助class关键字予以定义,命名必定需要大写置于开头部位,比如说就像class ForumPost这样。它等同于一张图纸,你唯有拿着这张图纸借助new才能够打造出真实的帖子。每一个post对象均有属于自身的标题以及内容,彼此并不会产生干扰。在2025年对Ruby China社区展开统计的时候,在Rails项目当中平均每一个应用定义43个自定义类。
模块借助module来进行定义,其命名规则跟类是一样的,然而它不能够进行new操作。模块更类似于工具箱,你能够在论坛项目当中撰写一个module Exportable,将把帖子导出为PDF的方法放置进去,接着让Post类include Exportable。如此一来Post便具备了导出功能,不过Exportable自身并非实物。刚开始接触的时候觉得绕是很正常的,编写两周代码此种模糊感就会消失。
实例方法和类方法分工不同
给对象使用的是实例方法,你若在Post类里定义了def title,那只有post.title才可调用,Post.title会报错。给类本身使用的是类方法,比如Post.search(“Ruby”),此搜索功能归属整个帖子类别,并非某一篇具体帖子。
以下是改写后的内容:小写下头起始的才是方法名,多单词情况要用下划线。在二零二六年GitHub上面开源的Rails 8.0代码当中,有超过十万个方法名都是依照这个规则的。当你于项目里瞅见find_by_email、update_attributes,一下子就能判别出它们是方法。
四种变量作用域要分清
#定义一个类,命名为Car
class Car
end
1. 全局变量是以$作为开头的,就像$redis这样。2. 2025年的时候,某电商公司事故复盘表明,有一个$order_status被两个线程同时作出修改,进而致使库存出现错乱。3. 从那以后,他们作出规定,在代码里禁止使用全局变量。4. 你项目里面基本上是用不到它的。
#定义一个模块,命名为BigCar
module BigCar
end
以@开头的属于实例变量,就像@title这样。只属于自身的是帖子对象的标题,另一个帖子标题的改变不会对其造成影响。你于控制器之中对@post进行赋值操作,在视图里面便能够直接呈现,此乃Rails较常见的数据传递方式。
类变量是以@@作为开头的,就像@@post_count这样。所有的帖子实例都是能够看到并且对这个总数进行修改的,不过在多线程的情况下是很容易出现问题的,在Rails 7之后官方文档明确地给出了建议要用类实例变量将它替代掉。
以大写起始的常量,全都大写乃是惯例。POST_LIMIT = 5被定义之后不应被改动调整,Ruby即便会给出警告但并不会强行加以阻止。在2026年2月新发布推出的Ruby 3.4增添增设了常量冻结的选项,更改这个常量会直接产生报错情况。常量定义于类的外部就是全局能够访问获取的,定义之内就需要像Post::POST_LIMIT这般进行调用。
#定义一个类,命名为MethodTest
irb(main):001:0> class MethodTest
#定义一个实例方法,命名为ins_method
irb(main):002:1> def ins_method
irb(main):003:2> puts "调用实例方法"
irb(main):004:2> end
#定义一个类方法,命名为cla_method,「self.方法名」就是类方法
irb(main):005:1> def self.cla_method
irb(main):006:2> puts "调用类方法"
irb(main):007:2> end
irb(main):008:1> end
=> :cla_method
#new是构造函数,MethodTest.new就是将MethodTest这个类实例化成一个对象,用实例对象才能调用实例方法
irb(main):009:0> MethodTest.new.ins_method
调用实例方法
=> nil
#不能用类直接调用实例方法,用MethodTest类直接调用实例方法会报错
irb(main):012:0> MethodTest.ins_method
NoMethodError: undefined method 'ins_method' for MethodTest:Class
Did you mean? instance_method
from (irb):12
#cla_method是类方法,用MethodTest类直接调用就可以,不需要先将类实例化
irb(main):010:0> MethodTest.cla_method
调用类方法
=> nil
你可曾有过,在才开场接触代码之际,被某一个概念给卡住,历经一整天时间,才陡然间想明白的那般经历呀?欢迎于评论区之中,去分享你的“恍然大悟一瞬”,点赞数量多的那些朋友,我会给出详尽的技术细节,助你将那个知识要点彻彻底底地理清哟。

Comments NOTHING