ruby的动态性

记住:Ruby的动态特性是以self身份的转换为基础的。
单例类
先来看看什么是单例类。大多数Ruby程序中发生的都涉及包含实例方法定义的类和模块:

class C
def talk
puts "Hi!"
end
end

使用下面的方法实例化和实例方法调用:

c = C.new
c.talk

还可以直接给单个对象添加方法:

obj = Object.new
def obj.talk
puts "Hi!"
end
obj.talk

像这样在特定对象上添加的方法称为单例方法。如果为一个给定的对象定义了单例方法,那么只有该对象可以调用该方法。

单例方法最常见的是类方法(因为普通的类也是对象,又称类对象,这些类都是Class类的实例):

class Ticket
def Ticket.most_expensive(tickets)
end
end

单例方法定义在何处
对象的单例方法定义在对象的单例类中。每一个对象实际上有两上类:
* 多个对象实例共享的类
* 单例类
可以将某个对象的单例类看作是它独有的方法保存区,仅仅由对象拥有,其他对象不能分防享。

直接检查和修改单例类
单例类是匿名的。使用下面的记法来打开单例类的定义:

class << object
# method and constant definitions here
end

<<object记法表明是object的匿名单例类。例:

str = " I am string"
class << str
def twice
self + " " + self
end
end
puts str.twice

输出:I am a string I am string
twice方法是str的单例方法。用下面的代码,效果是一样的:

def str.twice
self + " " + self
end

使用class << 定义类方法:

class Ticket
class << self
def most_expensive(tickets)
end
end
end

class << self经常用来定义类方法(此时的self是这个类对象本身)。
不管是什么对象,都可以使用该技术打开对象的单例类的定义体。这意味着,在这个定义体内所做的事都属于该对象。


方法查找路径上的单例类
对象的单例类出现在方法查找路径上的第一个位置。单例类是对象的个人方法存储区,所以最先搜索。由单例类混含进来的模块,先于对象所属类查找,也先于对象所属类混含的任何模块查找。

以上的意思是说:在方法查找的时候,单例类的内容永远优先于其他查找。

深入类方法
类方法是为Class类的对象定义的单例方法。在很多方面和其他的单例方法相似,但也有它特别的地方:为类对象定义的单例言法可以被该类的子类调用。

class C
end

def C.a_class_method
puts "Singleton method defined on C"
end

C.a_class_method

class D < C

D.a_class_method

类对象的单例类有时被称为元类,有时“元类”也泛指所有的单例类。
【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值