Day 5 用 Ruby 印东西

写在前面

虽然写铁人赛文章很有趣很有挑战性,但是常常很多时候都写得有点怕怕的,怕真实的状况跟自己写的不太一样,误人子弟之外还自曝其短,所以拜托如果有大大们刚好路过又发现"你XX到底在写什麽东西"的时候麻烦高抬贵手留言跟我说说。写这种文章神奇的就是写完整天都会想之後要写什麽、要怎麽接才不会怪、有什麽东西是之前忘了讲的。希望我可以继续撑下去呀!

测试语法或执行 Ruby 程序

我最常使用的方式是:

  1. irb
    在测试一些 ruby 语法上的特性或使用方法的时候会快速地进入 irb(interactive ruby)模式试试看。可以直接在你的终端机(Terminal)(如果是 Mac 的话通常会用 iTerm2,Windows 通常是用 Ubuntu)直接输入 irb 就会进入"互动红宝石"模式 (这样听起来比较高级),接着就可以看看某些方法或资料型别的运算是否跟你想的是一样的。
# 有井字号在前面是表示注解的意思,程序执行时不会执行这行
# 例如你想看一下数字 1 跟字串 1 是不是一样的可以这麽做
# Step 1
$ irb
# (这时候通常终端机的输入文字开头标示会从 $ 变成 > 但是如果你有自己改设定的话就以自己的设定为主)
# 可以稍微用 > 来分辨自己是不是处於"互动红宝石"模式
# Step 2
> 1 == "1"    # 还记得吗?要用两个等号喔
=> false     # 这个是回传值,如果直接执行程序或档案是不会看到的,但是 irb 底下他会显示给你看

> exit    # 这样就可以离开 irb 模式
  1. 直接执行 rb 档
    在终端机里执行 ruby (档案位置)
    如果你有正确地安装 ruby 的话,可以用终端机执行,方法大致分两种
    • 绝对路径:直接用 ruby (档案绝对路径) 执行
    • 相对路径:根据所在位置调整档案相对路径(可以进入档案的资料夹(这又是另一篇文章了...)直接在终端机上输入 ruby 加上档名 + 副档名(.rb) )
# 假设你在 c 槽底下的 how_are_you 资料夹里放了一个叫 good.rb 的档案,而你目前终端机位於 c 槽里

# 档案位在 c/how_are_you/good.rb
$ pwd    # 这个指令用来确认目前所在位置
/c/    # 显示你目前位在 c 槽

# 绝对路径执行 rb 档
$ ruby /c/how_are_you/good.rb

# 相对路径执行 rb 档
$ ruby how_are_you/good.rb
# 或是
$ cd how_are_you
$ ruby good.rb

# 注意最前面的斜线

印个 Hello, World

因为我懒惰没有写关於环境设定的文章 (因为有点麻烦、像是我用 Windows 还要多解释 Ubuntu...之类的东西) ,很开心地直接开始写了运算子啦~变数啦~这种我觉得比较有趣的地方,所以就一起忘了学习每个程序语言一开始都会做的一件事(可能是看到有东西跑出来可以莫名其妙地增加你的成就感?觉得噢天啊我就这麽学会写程序了呢!)。

所谓的"印出来"指的是让人类们可以看到程序里再发生什麽事,在跑程序的时候用了印出就会在主控台(console)里面印出你要看的东西,当我们在做除错(除虫 debug)的时候,可能会需要使用这个方法来快速确认程序执行的方式是否跟你所想的是一样的。
有一种很像的东西叫做"回传值 return",但它比较像是程序要跟其他程序沟通的时候使用的东西,普通时候是不会在console 里显示出来的唷。
附带一提,如果是在 irb 里面去执行的话,他会帮你显示出"回传值",所以有时我们也会用这个来确认语法问题。

在 ruby 里印东西有三种方法

  1. puts
    用这个方法印东西会呼叫 to_s 方法,印出东西之後回传 nil,然後印一个东西会帮你换一行(帮你加个 <br>
  2. print
    用这个方法印东西会呼叫 to_s 方法,印出东西之後回传 nil,但是"不会"帮你换行
  3. p
    用这个方法印东西"不会"呼叫 to_s 方法,所以可以看到你想要显示的资料的原始状态/原始资料型别,印出东西之後回传"本来会回传的东西"
> puts "1"
1
 => nil
# 回传 nil, 会换行

> print "1"
1 => nil
# 回传 nil, 不会换行

> p "1"
"1"
 => "1"
# 回完本来要回传的东西并显示原始资料型别

# 如果是阵列跟 nil 的组合
> puts [1, 2, nil]
1
2
           # 这边 nil 就不会印出任何东西
 => nil
 
> print [1, 2, nil]
[1, 2, nil] => nil

> p [1, 2, nil]
[1, 2, nil]
 => [1, 2, nil]

# 试着印出 nil 的话
> puts nil

 => nil
 
> print nil
 => nil
 
> p nil
nil
 => nil

写在後面

希望我写完这篇不要把大家变得更困惑才好XD 本来想写的其实是 Ruby 的方法(Method),但是发现如果不先写这些东西直接解释"方法"的话可能会让头脑搅在一起(很像写完这篇也会让头脑搅在一起XD),但我还是觉得要先讲一下这边的东西在解释"方法"的时候会让你有种"挖怎麽东西都串在一起的感觉"呢! (不要自说自话)

好的,这篇跟我预想的完全不一样,也超级基础,希望我的理解是对的,不然就糗了...


<<:  [Day5] 范围链

>>:  Day 20 纪录Log

Day10-Kubernetes 那些事 - Ingress 篇(二)

前言 在昨天的文章讲完 Ingress 的基本观念以及要如何在 minikube 上启动的基础建设後...

[Day 8] Reactive Programming - Reactor(FLUX & MONO) Part 2

前言 上一篇介绍了何谓FLUX & MONO,本篇就来说明具体的使用方式。 Just 最简单...

[Day29] 正规表达式 - 中英空白生成器实作

「曾经沧海难为水,中英不空眼睛痛」,每当看到文字没对齐、段落没缩排或者中文字遇英文字不加空白,就会感...

找LeetCode上简单的题目来撑过30天啦(DAY15)

题号:2007 标题:Find Original Array From Doubled Array ...

[Day18] - Django-REST-Framework API 呼叫及介面操作

昨天我们使用 DRF 实作出了第一个 API -- 商品查询 API 。相信大家都有感到成就感吧!以...