关于 Ruby
想知道 Ruby 为什么会如此受欢迎吗?在粉丝眼中,Ruby 是一门优美而巧妙的语言,他们还认为 Ruby 易于使用,能解决实际问题。想知道受到这些赞誉的原因吗?
Ruby 发明者的理想
Ruby 是一个注重均衡的语言,它的发明者松本行弘(Yukihiro “Matz” Matsumoto),混合了他喜欢的多门语言(Perl、Smalltalk、Eiffel、Ada 和 Lisp),创造出了一种兼具函数式编程和命令式编程特色的新语言。
他常说,他是“试着让 Ruby 更自然,而不是更简单”,让一切符合生活常规。
除此之外,他还提到:
Ruby 就像人的身体一样,表面上看来简单,但是内部却相当复杂。
Ruby 还有众多特性,下面列举一些:
-
Ruby 的异常处理特性与 Java 和 Python 类似,易于处理错误。
-
Ruby 拥有一个针对所有对象的标识-清扫(mark-and-sweep)式垃圾回收程序)。使用者无需维护扩展库中的引用计数。正如
Matz 所说:“这对您的健康有益。” -
为 Ruby 写 C 扩展比 Perl 和 Python 容易,因为 Ruby 有一个非常雅致的 API,能从 C 语言中调用
Ruby。例如,调用软件中内嵌的 Ruby,当做脚本语言使用。此外,还有 SWIG 接口可用。 -
如果操作系统允许,Ruby 可以动态加载扩展库。
-
Ruby 提供不依赖操作系统的线程。所以,不管操作系统是否支持,Ruby 支持的所有操作系统都可以使用多线程,甚至是 MS-DOS!
-
Ruby 高度可移植:它主要在 GNU/Linux 上开发,但也支持很多类型的 UNIX,以及
macOS,Windows,DOS,BeOS,OS/2 等。
rbenv
rbenv是类Unix系统上Ruby编程语言的版本管理工具
这对于在同一台机器上的多个Ruby版本之间切换以及确保您正在处理的每个项目始终在正确的Ruby版本上运行非常有用。
在安装时rbenv将自己注入PATH后,任何对ruby、gem、bundler或其他与ruby相关的可执行文件的调用都将首先激活rbenv。然后,rbenv扫描当前项目目录以查找名为.rub-version的文件。如果找到,该文件将确定该目录中应使用的ruby版本。最后,rbenv在~/.rbenv/versions/下安装的Ruby版本中查找该Ruby版本。
您可以为您的项目选择Ruby版本,例如:
cd myproject
# choose Ruby version 3.1.2:
rbenv local 3.1.2
这样做将使用您选择的版本在当前目录中创建或更新.ruby版本文件。您的另一个项目,即另一个目录,可能完全使用不同版本的Ruby。当您切换项目时,rbenv将无缝地从一个Ruby版本转换到另一个版本。
最后,rbenv机制的几乎每个方面都可以通过bash编写的插件进行自定义。
在带有Homebrew包管理器的系统上,建议使用“使用包管理器”方法。在其他系统上,“Basic Git Checkout”可能是确保始终安装最新版本的rbenv的最简单方法。
使用程序包管理器
使用以下方法之一安装r
安装rubybenv。
- 在macOS或Linux上,我们建议使用Homebrew安装rbenv。
brew install rbenv ruby-build
- Debian、Ubuntu及其衍生产品
在Debian和Ubuntu存储库中打包和维护的rbenv版本已经过时。要安装最新版本,建议使用git安装rbenv。
https://github.com/rbenv/rbenv
sudo apt install rbenv
- Arch Linux及其衍生产品
Archlinux有一个用于rbenv的AUR包,您可以使用此wiki页面中的说明从https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_and_upgrading_packages安装它。
在shell中加载rbenv
rbenv init
关闭“终端”窗口并打开一个新窗口,以便您的更改生效q!
就是这样!现在已经准备好安装Ruby版本了。
安装ruby
在尝试安装Ruby之前,检查构建环境是否具有必要的工具和库。然后:
# list latest stable versions:
rbenv install -l
# list all local versions:
rbenv install -L
# install a Ruby version:
rbenv install 3.2.2
从官方下载进行编译,非常慢
https://cache.ruby-china.com/pub/ruby/找到对应版本下载到~/.rbenv/cache
如果找不到rbenv-install命令,您可以将ruby build作为插件安装:
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
设置一个Ruby版本以完成安装并开始使用Ruby:
rbenv global 3.2.2 # set the default Ruby version for this machine
# or:
rbenv local 3.2.2 # set the Ruby version for this directory
rbenv global 3.2.2
通过将版本名称写入~/.rbenv/version文件,设置要在所有shell中使用的Ruby的全局版本。此版本可以由特定于应用程序的.ruby版本文件覆盖,也可以通过设置RBENV_version环境变量来覆盖。
特殊版本名系统告诉rbenv使用系统Ruby(通过搜索$PATH检测到)。
当在没有版本号的情况下运行时,rbenv全局报告当前配置的全局版本。
除了rbenv-install命令,还可以手动下载并编译Ruby作为~/.rbenv/versions的子目录。该
目录中的条目也可以是安装在文件系统其他位置的Ruby版本的符号链接。
安装gems
按照正常方式继续安装gems:
cd ~/.rbenv/versions/3.2.2/bin
./gem install bundler
./gem update
使用gem env安装gem的位置:
./gem env home
# => ~/.rbenv/versions/<version>/lib/ruby/gems/...
执行rehash。
rbenv rehash
显示rbenv在运行给定命令时将调用的可执行文件的完整路径。
$ rbenv which irb
卸载Ruby版本
随着时间的推移,安装的Ruby版本将累积在~/.rbenv/versions
目录中。
要删除旧的Ruby版本,只需rm-rf要删除的版本的目录。您可以使用rbenv prefix
命令找到特定Ruby版本的目录,例如rbenv-pprefix 2.7.0。
ruby构建插件提供了一个rbenv uninstall命
令来自动执行删除过程。
设置path
rbenv which ruby
查看路径
- LINUX
将/root/.rbenv/versions/3.2.2/bin
增加进~/.bashrc
或~/.bash_profile
或
- freebsd麻烦一些
/etc/profile
或~/.profile
这是FREEBSD的bash
- freebsd的root使用tsch,在/etc/csh.cshrc 中
/etc/csh.cshrc
所有用户的设置
root用户的设置/root/.cshrc
安装rails
gem list --remote
gem install rails
集成字符串
<<-
保持原样
irb(main):036:0" str2 = <<~MYDREAM
irb(main):037:0" 健康平安
irb(main):038:0" 事业赚钱
irb(main):039:0" 生活幸福
irb(main):040:0> MYDREAM
=> "健康平安n事业赚钱 n生活幸福n"
irb(main):041:0> print str2
健康平安
事业赚钱
生活幸福
=> nil
irb(main):042:0>
而<<~
删除缩进
irb(main):042:0" str1 = <<~MYDREAM
irb(main):043:0" 健康平安
irb(main):044:0" 事业赚钱
irb(main):045:0" 生活幸福
irb(main):046:0> MYDREAM
=> "健康平安n事业赚钱 n生活幸福n"
irb(main):047:0> print str1
健康平安
事业赚钱
生活幸福
=> nil
irb(main):048:0>
只是删除缩进,并不是删除所有空格
irb(main):048:0" str3 = <<~MYDREAM
irb(main):049:0" 健康 平安
irb(main):050:0" 事业 赚钱
irb(main):051:0" 生活 幸福
irb(main):052:0> MYDREAM
=> "健康 平安n事业 赚钱 n生活 幸福n"
irb(main):053:0> print str3
健康 平安
事业 赚钱
生活 幸福
=> nil
irb(main):054:0>
注释与变量内插
[maisipu@fedora learn]$ ruby learn4.rb
hello,world
你好,张三
[maisipu@fedora learn]$
ruby源码
#我是一行注释
puts "hello,world"
=begin
我是多行注释
第二行注释
第三行注释
=end
name="张三"
hello="你好,#{name}"
puts hello
单引号不能完成内插
irb(main):001:0> name="王五"
=> "王五"
irb(main):002:0> puts 'hello,#{name}'
hello,#{name}
=> nil
irb(main):003:0>
字典HASH
[maisipu@fedora learn]$ ./learn4.rb
25
28
33
23
31
[maisipu@fedora learn]$
#!/usr/bin/ruby
studentAge={
zhangsang:25,
lisi:28,
"wangwu":33,
"liuqing"=>23,
:wangling=>31,
test:21
}
puts studentAge[:zhangsang]
puts studentAge[:lisi]
puts studentAge[:wangwu]
puts studentAge["liuqing"]
puts studentAge["test"]
puts studentAge[:wangling]
数组
irb(main):018:0> x=[1,2,3]
=> [1, 2, 3]
irb(main):019:0> x[0]
=> 1
irb(main):020:0> x[2]
=> 3
irb(main):021:0> x[1]
=> 2
irb(main):022:0>
irb(main):014:0> x1,x2=1,2
=> [1, 2]
irb(main):015:0> x1,x2,x3=1,2,3
=> [1, 2, 3]
irb(main):016:0> x1
=> 1
irb(main):017:0> x2
=> 2
irb(main):018:0>
times迭代
irb(main):022:1* 4.times {|x|
irb(main):023:1* puts x+5
irb(main):024:0> }
5
6
7
8
=> 4
irb(main):025:0>
irb(main):025:1* 50.times{|x|
irb(main):026:2* if (x%5==0 and x%3==0)
irb(main):027:2* puts x
irb(main):028:1* end
irb(main):029:0> }
0
15
30
45
=> 50
irb(main):030:0>
irb(main):044:1* 10.times{|x|
irb(main):045:2* if (x==5)..(x==9)
irb(main):046:2* puts x+200
irb(main):047:2* else
irb(main):048:2* puts x
irb(main):049:1* end
irb(main):050:0> }
0
1
2
3
4
205
206
207
208
209
=> 10
文章来源: 博客园
- 还没有人评论,欢迎说说您的想法!