Ruby

Ruby和Python的区别

  • Python的解析器实现更成熟,第三⽅库质量⾼。但是Ruby包管理更简单、⽅便。
    python语法更简便,ruby语法更灵活、强大、性能强大
    python相当于拼音,ruby相当于双语,但是ruby语法提示需要安装插件从网络上获取
  • Python的应⽤领域⼴泛。⽽Ruby⽬前主要局限在在Web领域与精致项⽬。
  • Python语法简单,Ruby更强⼤、灵活

常用命令:
**ruby –version:**查看目前电脑的ruby环境

Ruby安装

Ruby Version Manager

rvm & rbenv

  • rvm & rbenv是⼀种命令⾏⼯具,可让您轻松地安装,管理和使⽤多个Ruby环境。
  • 这两个⼯具本质都是在 PATH 上做⼿脚,⼀个在执⾏前,⼀个在执⾏中。
  • 如果你不需要维护特定版本的 Ruby 项⽬,那么只需要装⼀个⽐较新的 Ruby 版本就⾏了。目前ruby3.0对很多工具存在兼容问题
  • 如果想深入学习,可以先了解rvm管理工具

常用命令:

  • rvm list know: 当前rvm能够管理的ruby版本
  • rvm list: 显示当前电脑可用的ruby版本
  • rvm install ruby-2.7.3: 通过rvm安装指定版本的ruby环境
  • rvm install ruby –head: 安装目前rvm可以安装的ruby的最高版本

gem命令

  • 与⼤多数的编程语⾔⼀样,Ruby 也受益于海量的第三⽅代码库。
  • 这些代码库⼤部分都以 Gem 形式发布。 RubyGems 是设计⽤来帮助创建,分

享和安装 这些代码库的。

  • gem search -r/-f
  • gem install –version
  • gem list

Bundler
• Bundler 能够跟踪并安装所需的特定版本的 gem,以此来为 Ruby 项⽬提供⼀致的运⾏环境。

image.png

  • source ‘rubygems.org‘ :指定的源
  • gem ‘rails’, ‘4.1.0.rc2’ : 需要的库的版本
  • gem ‘rack-cache’
  • gem ‘nokogiri’, ‘~> 1.6.1’

rvm会从Gemfile里面的描述的指定的源拉取需要的库,然后会生成一个Gemfile.lock,这个文件是用来记录每次只需bundle install时候的版本信息,其中Gemfile里面的语法跟podfile语法一样

cocoapods就是仿照rvm,用于iOS开发

调试

ruby-debug-ide gem — 中间件

ruby-debug-ide提供了交互环境。和IDE(例如RubyMine,Visual Studio Code或Eclipse)之间建⽴通信的协议。“ ruby -debug-ide”将命令从IDE重定向到调试器。然后,它将从调试器收到的答案/事件返回给IDE。

安装方式:

gem install ruby-debug-ide
复制代码

注意的是这个安装是安装到指定版本的ruby环境下的,所有的ruby工具都是依赖ruby版本进行安装的

debase — 真正的调试器

  • debase是针对Ruby 2.0的标准Ruby调试器debug.rb的快速实现。它是通过利⽤新的Ruby TracePoint类实现的。核⼼组件提供了前端可以建⽴的⽀持。它提供断点处理,堆栈信息等。

安装方式:

gem install debase
复制代码

bundle exec

  • 使⽤bundle exec运⾏命令时,默认会将gemfile⽂件中指定的gem加载到ruby程序中。

rubocop

  • Rubocop 是基于 ruby-style-guide / Ruby ⻛格指导 实现的⼀个代码⻛格检查器

solargraph

  • solargraph是⼀种语⾔服务器,为Ruby提供智能感知,代码完成和内联⽂档。

在写ruby脚本时候会有提示,并不是类似xcode注释一样点进去可以看到实现,ruby的提示适合本机安装的一个gem插件,然后去访问网络提示的,用到的就是solargraph

一般复杂的脚本都是用ruby。

env

  • printf “\n”env”: {\n “PATH”: “$PATH”,\n “GEM_HOME”:

GEM_HOME\”,\n \”GEM_PATH\”: \”GEM_PATH”,\n
“RUBY_VERSION”: \”$RUBY_VERSION”\n}\n\n”

  • 按照VSCode Ruby配置规则,输出环境变量

VSCode插件

  • Ruby : 在vscode里面所有的插件不代表一个功能,他代表的是一个中间件,是用来和本机ruby环境进行沟通的
  • Solargraph Autocomplete Tip : 提示插件
  • Error Lens :判断当前代码是否存在问题的插件

调试:

  • 在vscode项目目录下创建.vscode,然后在里面创建launch.json文件
{
  // https://github.com/rubyide/vscode-ruby/wiki/2.-Launching-from-VS-Code#available-vs-code-defined-variables
  "configurations": [
    {
    "name": "Debug Ruby Code",
    // 输出调试信息
    "showDebuggerOutput": true,
    // 告诉VS Code要运行什么调试器。
    "type": "Ruby",
    // "launch"允许直接从VS Code启动提供的程序-或"attach"-允许您附加到远程调试会话。
    "request": "launch",
    // rdebug-ide在内运行bundler exec
    "useBundler": true,
    // 始终在入口处停止
    "stopOnEntry": false,
    // "program"的工作目录
    "cwd": "${workspaceRoot}", 
    // 指定调试脚本,调试当前打开的文件"program": "${file}"
    "program": "${file}",
    // 提供program命令参数
    "args": [],
    // 启动程序之前,提供要设置的环境变量
    "env": {
      "PATH": "/Users/ws/.rvm/gems/ruby-2.6.0/bin:/Users/ws/.rvm/gems/ruby-2.6.0@global/bin:/Users/ws/.rvm/rubies/ruby-2.6.0/bin:/Users/ws/.rvm/bin:/usr/local/opt/llvm@11/bin:/usr/local/opt/sqlite/bin:/usr/local/opt/openssl@1.1/bin:/usr/local/opt/openssl@1.1/bin:/usr/local/opt/ruby/bin:/Users/ws/thirdpartyLib/custom:/Users/ws/.yarn/bin:/Users/ws/.config/yarn/global/node_modules/.bin:/Users/ws/thirdpartyLib/jtool/jtool2:/usr/libexec/java_home:/Users/ws/thirdpartyLib/protobuf37/bin:/Users/ws/.pub-cache/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Library/Apple/usr/bin",
      "GEM_HOME": "/Users/ws/.rvm/gems/ruby-2.6.0",
      "GEM_PATH": "/Users/ws/.rvm/gems/ruby-2.6.0:/Users/ws/.rvm/gems/ruby-2.6.0@global",
      "RUBY_VERSION": "ruby-2.6.0"
    }
    }
  ]
}
复制代码

存在问题就是因为ruby的插件都是按照再指定版本下的,假如电脑当前的ruby环境和configurations里面指定的版本不一致时候,就会出现问题 。而这个configurations就是给当前vscode里面编写的ruby脚本运行的环境变量,关于这个configurations可以通过上面env的那个命令自动生成

Symbol

  • Ruby 是⼀个强⼤的⾯向对象脚本语⾔,⼀切皆是对象
  • 在 Ruby 中 Symbol 表示“名字”,⽐如字符串的名字,标识符的名字。
  • 创建⼀个 Symbol 对象的⽅法是在名字或者字符串前⾯加上冒号:
  • 在 Ruby 中每⼀个对象都有唯⼀的对象标识符(Object Identifier)
  • 对于 Symbol 对象,⼀个名字唯⼀确定⼀个 Symbol 对象 Ruby 内部⼀直在使⽤ Symbol,Ruby内部也存在符号表
  • Symbol 本质上是⼀个数字,这个数字和创建 Symbol 的名字形成⼀对⼀的映射;⽽String 对象是⼀个重量级的⽤C结构体表示的家伙,因此使⽤ Symbol 和 String 的开销相差很⼤。
  • 符号表是⼀个全局数据结构,它存放了所有 Symbol 的(数字ID,名字)。 Ruby 不会从中删除 Symbol ,因此当你创建⼀个 Symbol 对象后,它将⼀直存在,直到程序结束。

cocoapods-binary

  • cocoapods-binary 通过开关,在 pod insatll 的过程中进⾏ library 的预编译,⽣成framework,并⾃动集成到项⽬中。
  • 整个预编译⼯作分成了三个阶段来完成:
  • binary pod 的安装
  • binary pod 的预编译
  • binary pod 的集成
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享