Ruby学习笔记之标准库

Unity投影阴影完全指南:Shadow Map原理与ShadowCaster实战 实时阴影是建立视觉接地感的关键,缺少投影阴影的物体会显得悬浮于场景之上。理解Shadow Map的基本原理——从光源视角生成深度图,再通过深度比较判定片元是否处于遮挡中——是掌握Unity阴影系统的基础。引擎将整套机制封装为可配置参数,但只有理解Shadow Distance、Cascade、Depth Bias与Normal Bias的作用,才能有效解决阴影锯齿、闪烁和漏光等问题。进一步地,在自定义Shader中正确编写ShadowCaster Pass并接入阴影采样管线,是实现定制化阴影效果的必备技能。 阅读详情

标准库


Strings


字符串嵌入表达式

在ruby中,如果在创建字符常量时使用双引号,那么可以在#{}中嵌入一个表达式,Ruby会自动把表达式的值和字符串连接起来

result = "Good night, #{name.capitalize}"

puts "now is #{ def the(a)

'the ' + a

end

the('time')

} for all good coders..."

对于全局变量有不同的语法

$salutation = 'hello' # Define a global variable

"#$salutation world" # Use it in a double-quoted string

调用底层操作系统命令

`date` # => "Mon Apr 13 13:25:58 CDT 2009\n"

`ls`.split[34] # => "ext_c_win32ole.tip"

%x{echo "Hello there"} # => "Hello there\n"

从第二条可以看到,从操作系统返回的结果是一个String,因此还可以程序交互

长字符

Ruby中用%{}来处理长字符。这个字符中可以放任何格式化的字符。

符号(关键字)


可以把符号看做变量名和变量值相同的变量,这时候不分辨变量名和值。由于值和名字都是相同的,因此甚至不用设置初始值,直接用就可以。

符号用在变量不变且仅仅要用来标示的地方。

1.用在映射中

inst_section = {

:cello => 'string',

:clarinet => 'woodwind',

:drum => 'percussion',

:oboe => 'woodwind',

:trumpet => 'brass',

:violin => 'string'

}

inst_section[:oboe] # => "woodwind"

inst_section[:cello] # => "string"

# Note that strings aren't the same as symbols...

inst_section['cello'] # => nil

2.用在全局标示

def walk(direction)

if direction == :north

# ...

end

end

在反射中

由于在Ruby中类中的方法和变量都是用符号来表示的,因此在放射中用的特别多

o.respond_to? :each

集合


Hash


定义

inst_section = {

'cello' => 'string',

'clarinet' => 'woodwind',

'drum' => 'percussion',

'oboe' => 'woodwind',

'trumpet' => 'brass',

'violin' => 'string'

}

在1.9中还支持另一种方法

numbers = { one: 1, two: 2, three: 3 }

这个相当于

numbers = { :one => 1, :two => 2, :three => 3 }

Hash的默认值

可以这样看待hashtable:hashtable中存在每一个查询的键,只是有的键的值为null。这样可以在创建hashtable时指定默认值,每次就可以直接使用默认值(因为null在计算时无用)

if counts.has_key?(next_word)

counts[next_word] += 1

else

counts[next_word] = 1

end

到

def count_frequency(word_list)

counts = Hash.new(0)

for word in word_list

counts[word] += 1

end

counts

end

可变键

Because strings are mutable but commonly used hash keys, Ruby treats them as a special case and makes private copies of all strings used as keys. This is the only special case,however; you must be very cautious when using any other mutable object as a hash key. Consider making a private copy or calling the freeze method. If you must use mutable hash keys, call the rehash method of the Hash every time you mutate a key

Array


定义

a = [ 1, 'cat', 3.14 ]

添加

a[2] = nil

a<<"ssj"

防问(切片):

a = [ "a", "b", "c", "d", "e" ]

a[2] + a[0] + a[1] #=> "cab"

a[6] #=> nil

a[1, 2] #=> [ "b", "c" ]

a[1..3] #=> [ "b", "c", "d" ]

a[4..7] #=> [ "e" ]

a[6..10] #=> nil

a[-3, 3] #=> [ "c", "d", "e" ]

# special cases

a[5] #=> nil

a[5, 1] #=> []

a[5..10] #=> []

删除元素

delete

有用的方法

clear,清空列表

map和collect,接受一个函数,对列表中的每一个元素作用,得到的是一个新的列表,原来的列表不变

map!和collect!,和map和collect类似,但是改变发生在原来的列表上

select ruby版filter

inject ruby版reduce

对于String的特殊支持

words = %w[this is a test] # Same as: ['this', 'is', 'a', 'test']

open = %w| ( [ { < | # Same as: ['(', '[', '{', '<']

white = %W(\s \t \r \n) # Same as: ["\s", "\t", "\r", "\n"]

Numbers


整型


Ruby的整数在Fixnum和Bignum之间自动转换

迭代

3.times { print "X " }

1.upto(5) {|i| print i, " " }

99.downto(95) {|i| print i, " " }

50.step(80, 5) {|i| print i, " " }

Ranges


作为序列

1..10

'a'..'z'

0..."cat".length

三点没有上界,两点有

区间

(1..10) === 5 # => true

(1..10) === 15 # => false

(1..10) === 3.14159 # => true

('a'..'j') === 'c' # => true

('a'..'j') === 'z' # => false

cold_war.include? birthdate.year

用在case中

case car_age

when 0...1

puts "Mmm.. new car smell"

when 1...3

puts "Nice and new"

when 3...6

puts "Reliable but slightly dinged"

when 6...10

puts "Can be a struggle"

when 10...30

puts "Clunker"

else

puts "Vintage gem"

end

succ


succ用来得到一个对象的下一跳

自定义序列

一个类必须实现succ方法,放回下一跳。

同时要实现空间船方法<=>

class PowerOfTwo

attr_reader :value

def initialize(value)

@value = value

end

def <=>(other)

@value <=> other.value

end

def succ

PowerOfTwo.new(@value + @value)

end

def to_s

@value.to_s

end

end

p1 = PowerOfTwo.new(4)

p2 = PowerOfTwo.new(32)

puts (p1..p2).to_a

IO


File


open

open方法和new方法都可以打开一个文件,但是open方法还可以和块一起工作。这样,仅仅需要把想要的操作放到块里面就可以,不需要处理文件的细节。比如异常。

迭代器

1.each_byte

File.open("testfile") do |file|

file.each_byte {|ch| print "#{ch.chr}:#{ch} " }

end

2.each_line

File.open("testfile") do |file|

file.each_line {|line| puts "Got #{line.dump}" }

end

IO


foreach

IO的foreach方法结合了打开和迭代,因此更加简单

IO.foreach("testfile") {|line| puts line }

StringIO

把String当做流

require 'stringio'

ip = StringIO.new("now is\nthe time\nto learn\nRuby!")

op = StringIO.new("", "w")

ip.each_line do |line|

op.puts line.reverse

end

op.string # => "\nsi won\n\nemit eht\n\nnrael ot\n!ybuR\n"

迭代器


外部迭代器


Ruby中传统的迭代器并不像其他语言中的迭代器那样会得到每一个元素,他仅仅是在对象中对每一个元素调用块。因此在ruby1.9中实现了一个Enumerators,相当于传统的迭代器

创建迭代器

enum_a = a.to_enum

enum_a = a.each

使用迭代器

enum_a.next

next

rewind

把迭代重新开始

注意

1.迭代器在迭代已经开始时,无法拷贝

zip

内部迭代器

each以及相似的接受一个快来迭代的方法,这儿迭代中的数据没有显式出现在客户代码中,仅仅出现在块中。

53、Ruby标准库实用指南 本文详细介绍了Ruby的多个标准库,包括临时目录定位、程序执行跟踪、拓扑排序、文件操作命令行接口、统一资源标识符解析、弱引用管理、Web服务器工具包、Windows DLL访问、Windows自动化、XML-RPC远程调用、对象序列化、压缩文件读写以及套接字网络通信等库的功能和使用方法。通过代码示例与场景分析,帮助开发者更好地理解各库的适用场景及使用技巧,并提供了常见问题的解决方法和实际应用案例,为Ruby开发者提供了一套全面的标准库使用指南。 阅读详情

相关推荐

52、Ruby 标准库实用功能详解

本文详细介绍了 Ruby 标准库中的多个实用功能,包括集合操作(Set)、字符串分割(Shellwords)、单例模式(Singleton)、SOAP 协议支持、网络通信(Socket)、字符串 IO 模拟(StringIO)、字符串分词(StringScanner)、线程同步(Sync)、系统日志(Syslog)、临时文件管理(Tempfile)、单元测试(Test::Unit)、多线程支持(Thread 和 ThreadsWait)、时间处理(Time)、代码超时控制(Timeout)以及 GUI 开发

cheese的博客 133

Ruby标准库一览

文本     base64.rb 处理Base64编码的模块      csv.rb CSV(Comma Separated Values)库 ruby 1.8 特性      digest.so 消息摘要库 请参考[ruby-src:ext/digest/digest.txt.ja]      digest/md5.so      digest/rmd160.so      dige

andych008的专栏 1874

46、Ruby 核心类与标准库深度解析

本文深入解析了Ruby的核心类与标准库,包括ThreadGroup类的线程管理机制、Time类的时间操作与格式化、TrueClass的逻辑运算、UnboundMethod的绑定与调用,以及Ruby标准库的使用与文档查找方法。通过详细的代码示例和流程图,帮助开发者全面理解这些核心组件的功能与应用场景。

ruby5的博客 63

Ruby学习教程大纲

以上是Ruby学习教程的大纲,可以根据自己的需要和学习进度进行选择和学习。Ruby 2.0、Ruby 2.1和Ruby 2.2的新特性。Ruby on Rails的概念和发展。include和extend的区别。Ruby Gems的概念和使用。Hello World程序。常见的Ruby Gems库。Rails的架构和组成部分。Rails的常见功能和用途。套接字和网络编程的基础知识。Ruby标准库的组成部分。Ruby的代码风格和规范。Ruby的未来和发展趋势。表达式的求值和类型转换。正则表达式的概念和实现。

DICA的SEOer专栏 976

52、Ruby 标准库实用功能解析

本文详细解析了 Ruby 标准库中一系列实用功能模块,包括集合操作、字符串处理、线程同步、网络通信、日志记录、临时文件管理、单元测试框架等。通过丰富的示例代码,展示了每个库的核心功能和典型应用场景。同时对多个库的功能进行了总结对比,并探讨了其组合使用方式及性能优化建议。适合 Ruby 开发者深入掌握标准库的使用,提高开发效率。

ruby5的博客 67

52、Ruby 标准库实用模块解析

本文深入解析了Ruby的多个实用标准库模块,如Digest用于消息摘要算法,DL用于动态加载功能,dRuby支持分布式对象处理,English提供全局变量的英文名称等。通过详细的示例代码和说明,帮助开发者快速掌握这些模块的使用方法,并应用于实际开发中。文章还总结了各模块的功能及使用建议,并提供了一个综合示例展示模块间的协作方式,同时指出了使用中的注意事项和未来发展趋势。

e4f5g6h7的博客 54

ruby 标准库一览(备注)

文本 base64.rb 处理Base64编码的模块 csv.rb CSV(Comma Separated Values)库 ruby 1.8 特性 digest.so 消息摘要库请参考[ruby-src:ext/digest/digest.txt.ja] digest/md5.so digest/rmd160.so digest/sha1.so digest/sha2.so e

兴趣是最好的老师 1095

Ruby Web开发:深入Ruby的Web工具和框架

本文介绍了Ruby在Web开发中的应用,包括Ruby标准库中的网络相关工具、模板工具ERB、Rack标准、Sinatra框架和Puma服务器。通过对CGI编码、ERB模板和Rack中间件的探讨,文章展示了Ruby在Web开发中的多样性和灵活性。

weixin_42527665的博客 862

Ruby Facets深度解析:如何让Ruby标准库变得更强大更高效

你是否曾经在Ruby开发中感到标准库的功能不够用?是否经常需要重复编写相似的辅助方法?这正是Ruby Facets要解决的核心问题。作为Ruby编程语言中最全面的标准库扩展集合,Ruby Facets通过原子化的设计理念,让你能够精准地增强Ruby的内置类功能,而不必引入整个庞大的框架。 [![Ruby Facets项目标识](https://raw.gitcode.com/gh_mirrors

gitblog_01048的博客 945

Ruby编程语言完整中文文档

Ruby是一种优雅而功能强大的编程语言,以简洁的语法和面向对象特性受到开发者的喜爱。在本章中,我们将探索Ruby的基础语法,并通过实践加深理解。在面向对象编程(OOP)中,类可以被视作创建对象的蓝图或模板,而对象是类的实例。理解类和对象是深入面向对象编程特性的关键。类是定义一组具有相同属性(成员变量)和方法(成员函数)的集合。而对象是实际存在并可以操作的具体实体。通过类,可以创建多个拥有相同特性和行为的对象。这种方式简化了代码的管理和重用,同时增强了程序的可维护性和扩展性。

weixin_42502089的博客 1117

ruby标准库

ruby的常用方法,相对简单,中文的,如果用于ruby开发和学习,都比较有用

Ruby标准库与内置模块解析

Ruby标准库与内置模块解析 【免费下载链接】ruby The Ruby Programming Language 项目地址: https://gitcode.com/GitHub_Trending/ru/ruby ...

gitblog_00687的博客 533

ruby 标准库

ruby 标准库29.8 display 将对象输出到out。其定义如下: class Object def display(out=$stdout) out.print to_s nil end end 返回nil。

Ruby:优雅与高效并行的编程语言

Ruby 以其优雅的语法、纯粹的面向对象特性、丰富的标准库和活跃的社区生态,成为了一门备受开发者喜爱的编程语言。它不仅适合快速开发原型和小型项目,也能够胜任大型复杂系统的构建。尽管 Ruby 在性能方面可能不如一些编译型语言,但其在开发效率和代码可维护性上的优势,使得它在众多应用场景中依然具有不可替代的地位。随着技术的不断发展,Ruby 也在不断演进和完善,相信在未来,它将继续为开发者带来更多的惊喜和价值。

weixin_70208651的博客 2041

Transformer是什么?看完这篇你就醍醐灌顶

前言 由谷歌团队提出的预训练语言模型BERT近年来正在各大自然语言处理任务中屠榜(话说学者们也挺有意思的,模型名都强行凑个芝麻街的人物名,哈哈哈)。 BERT算法的最重要的部分便是Transformer的概念,它本质上是Transformer的编码器部分。 而Transformer是什么呢?transformer是永远的神,自从transformer使用了抛弃rnncnn的纯attention机制之后,各种基于transformer结构的预训练模型都如雨后春笋般雄起,而transformer中最重要就是使用

fs1341825137的博客 6万+

注册电气工程师详细教材

注册电气工程师详细教材

qq_40844444的博客 4250

ruby语言有什么优势

Ruby 语言的优势体现在其简洁易读的语法、完全面向对象的设计、灵活的动态类型系统、强大的标准库和社区支持、以及在 Web 开发中的广泛应用。所有这些特性使得 Ruby 成为一种适合快速开发和迭代的语言,特别是在 Web 开发和脚本编写领域。减少样板代码(boilerplate code)指的是减少那些在编程中必须反复编写的、结构化的代码块,这些代码块通常并不包含实际的业务逻辑,而是为了实现某些功能或满足某些框架和库的要求。

zhangzhechun的专栏 1596

MMCV安装后报错‘from mmcv import Config’?别慌,这是MMCV 2.0的锅!快速降级回退MMCV 1.x全指南

本文详细解析了MMCV 2.0版本升级导致的‘from mmcv import Config’报错问题,提供了从诊断到降级回退MMCV 1.x的完整解决方案。通过pip和OpenMIM工具链的实操指南,帮助开发者快速解决版本冲突,确保项目稳定运行。

weixin_29102619的博客 263
上一篇: Ruby学习笔记之函数
下一篇: Ruby学习笔记之面向对象
ssjssh
博客等级 码龄15年 12粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值