Ruby元编程起步1

不少测试同行都有接触过Ruby,但是如果没有接触过Ruby的元编程是一种比较遗憾的事情。今天与大家分享一个简单的小例子,希望对大家有帮助。

这个例子是如何把一个csv文件映射成一个类,文件中的记录映射成这个类的实例。

Friends.csv
name,gender,age,dept
Li Lei,M,23,edw
Han Mei-mei,F,22,b2b
Jim Green,M,23,TRH

我们可以为以上文件创建一个类,然后name, gender, age, dept都是这个类的属性(Attribute)。如果我们想找叫Li Lei的员工,我们可以这样写
Lilei = Friends.find_by_name(‘Li Lei’)
得到Li Lei的部门
Lilei_dept = lilei.dept

传统思路我们会这样实现:

class Friends
attr_reader :name, :gender, :age, :dept

# 类变量@@data用来存储所有记录
@@data = []

def initialize name, gender, age, dept
@name, @gender, @age, @dept = name, gender, age, dept
end

def self.find_by_name name
@@data.select {|data| data.name == name}[0]
end

# 填充@@data
File.open('Friends.csv') do |file|
file.readline # Skip fist row
file.each_line do |line|
@@data << self.new(*line.chomp.split(','))
end
end

end

lilei = Friends.find_by_name('Li Lei')
lilei_dept = lilei.dept

但是这样弱爆了……如果有一万个csv文件你要写一万个几乎差不多的类,谁都不想重复发明那么多轮子。但是如果你学会了元编程,就可以非常优雅的解决这个问题。

1. 动态创建类
元编程就是用程序写程序,具体到我们这里,我们要让程序来写出我们所期望的类。首先要想的问题是我们要给程序的输入(5秒钟思考时间)……我们所需要的信息有csv文件的名字,csv文件的结构(attributes),以及内容,但是前者可以决定后两者,所以我们紧紧需要文件名即可。

有了文件名了,如何才能让程序把类建出来?

据我所知有两种方法:

第一种:Object.const_set(class_name, Class.new)
不用查帮助文档我们也能看出来,这个方法是给常量赋值的,但是又怎么能创建类呢?
答案很简单,Ruby中,类是一个常量!今天不花篇幅解释了,知道就行。

第二种:Friends = Class.new
这种方法一般接触过Ruby的同学都好理解,Ruby里所有东西都是对象,连类本身都是对象,具体的类是类这个类的实例……如果你看不懂这段绕口令的话,就看上面哪行代码吧。Ruby的世界很简单,所有东西都是对象(半静态语言介绍OO的时候不要说这句话了),对象就是能被它所属的类给new出来!
还有一点就是,正如刚才所说,因为类又是常量,所以首字母要大写。

OK,终于可以动手了,赶紧完成这个起步的起步:

module Tool

def self.csv2class csv_name
klass_name = csv_name.gsub('.csv', '').gsub(/\s+/, '_').downcase.capitalize
Object.const_set(klass_name, Class.new)
end

end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值