Ruby方法

技术小咖之Ruby 方法 Ruby 方法 Ruby 方法与其他编程语言中的函数类似。Ruby 方法用于捆绑一个或多个重复的语句到一个单元中。 方法名应以小写字母开头。如果您以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用。 方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常。 def method_name [( [arg [= default]]...[, * ... 阅读详情

方法定义于对象,用来进行与该对象的相关操作。Ruby中所有的操作都以方法的形式来实现

一般情况下,我们通过(对象.方法名)的方式来调用方法。其中对象被称为是接收者。

根据接收者的不同,我们将方法区分为3种:

  1. 实例方法

当对象(实例)存在的时候,把该对象作为接收者的方法叫做实例方法。

  1. 类方法

当接收者不是实例而是类的时候,这个方法称为类方法。调用的时候不光可以用’.’还可以使用’::’。

定义类方法:

	class Test  
		   class << self  
		     def a  
		       puts "static method"  
		     end  
		   end  
		end

或是

		class Test  
		     def self.a  
		       puts "static method"  
		     end  
		end

第一种方法对于同时定义多个类方法很方便,因为不需要写多个self,第二种比较简单。
  1. 函数性方法

没有接收者的方法称为函数性方法。比如:sin(3.14)、print “Hello”。

方法在定义的时候可以预设值,当参数不止一个时,预设值需要从右端的参数开始设置。

一些高级方法

动态方法(Dynamic Methods)

1)动态调用方法

我们一般通过’.’和具体的方法名来调用一个方法,但是我们也可以通过另一种方式来调用一个方法:

class TuesDay_study
  def my_method my_arg
    my_arg*2
  end
end

study = TuesDay_study.new
p study.my_method(3)

p study.send(:my_method, 3)
p study.send('my_method', 3)

通过send方法我们可以使用一个方法名作为参数,这样我们可以在代码运行的期间,知道最后一刻才决定调用哪个方法。这种技术称为动态派发(Dynamic Dispatch)。

send方法可以调用任何方法,甚至包含私有方法。

2)动态定义方法

可以利用Module#define_method()方法定义一个方法,只需要为其提供一个方法名和一个充当方法主体的块即可。如:

class MyClass
  define_method :my_method do |my_arg|
    my_arg*3
  end
end

obj = MyClass.new
p obj.my_method(4)

这种在运行时定义方法的技术称为动态方法(Dynamic Method)。

method_missing()方法

在Kernel中有一个实例方法,method_missing(),当调用找不到的方法使就会关联到这个方法上。

我们在覆写 method_missing()方法的时候,一个幽灵方法通过respond_to?()返回为false,但是我们希望返回的是true,这样就需要同时覆写respond_to?()方法,以保证幽灵方法也可以返回true。

1)幽灵方法

当需要定义很多相似的方法时,可以通过 method_missing()方法来避免手工定义这些方法的工作。被 method_missing()处理的方法,从调用者的角度看和其他方法没有任何不同,但实际上接收者并没有对应的方法,这就被称为幽灵方法。

2)动态代理

一个捕获幽灵方法调用并把它们转发给另外一个对象的对象,称为动态代理(Dynamic Proxy)。


COCOS 3.8 接入高德定位SDK /微信登录所必须的code。//是否获得code。 阅读详情

相关推荐

一分钟学会MATLAB-数据清洗(含完整代码)

数据清洗是数据分析过程中的一个重要步骤,目的是提高数据的质量,以便进行更有效的分析。% 删除超出阈值的行。% 用线性插值填充缺失值。% 删除包含缺失值的行。% 找到缺失值的位置。% 可视化数据,识别异常值。缺失值是数据清洗中常见的问题。通过以上步骤,你可以有效地清洗数据,使其准备好进行后续的分析和建模。

2402_87132195的博客 3316

ruby 常用的方法的总结

下面是学习中对ruby的一些常见的方法的总结: 1.each方法 each方法经常与block一起使用,它的最大好处能够在某冲情况下取代for循环的功能。each方法会将调用它的对象中的所有元素依次赋给与each方法相关联的block的变量。 例如: ('a'..'e').each{  |char| print char }         输出结果是 abcde   #range

@奮 鬥@的专栏 2243

【机器人】机械臂控制入门技术栈分享

机械臂控制入门技术栈分享1.前言2.机器人控制入门技术栈2.1.空间描述和变化2.2.运动学分析2.3.动力学建模2.4.控制入门学习3.进阶部分3.1.机器人参数辨识3.2.非线性控制3.3.现代机器人描述方法:指数坐标4.总结 1.前言 今天看到优快云上有个分享个人技术栈的活动,虽然我不是一个正规的程序员,也不搞前端、后端这些,但我一直在优快云上通过写博客对我的学习进行总结,于是我突发奇想,不如我也写一下我的个人技术栈,针对机械臂控制入门的,因为我水平也不高,所以本文内容也许不够饱满,也不够准确,但

要恰饭得嘛 5858

【Ruby】常用方法总结

文档链接:ruby文档地址 delete() 简介: 从self中删除等于obj的所选项。返回最后删除的项,如果找不到匹配项,则返回nil。如果给定了可选代码块,则如果找不到该项,则返回该代码块的结果。(要删除nil元素并获得有信息量的返回值,请使用#compact!) String范例: “(aa11234[s]d)d”.delete("()[]") => “aa11234sdd” Array范例: pry(main)> a = [12,3,5] => [12

m0_46537958的博客 310

用豆包+Skill从零制作AI漫剧:分镜、画面、配音到成片全流程

AI漫剧作为一种新兴内容形态,结合AI绘画与AI视频生成技术,正在改变短视频创作方式。其核心原理是利用提示词工程,将创意转化为结构化分镜脚本,再通过豆包等AI助手的Skill能力,将重复的脚本生成和分镜拆解流程固化为可复用的指令模板,从而大幅降低从构思到成品的生产门槛。这种模式无需剧组、演员和实景拍摄,让个人创作者也能借助图像生成、TTS配音与剪辑合成工具,批量化地生产剧情短片,适用于短视频平台连载、商业定制与个人IP打造。围绕豆包+Skill这条主线,从选题、剧本写作、分镜表设计,到画面提示词生成、视频片

weixin_29048309的博客 1493

RK3588工业开发板实战:如何用IgH EtherCAT主站精准控制伺服电机(附完整代码)

本文详细介绍了如何利用RK3588工业开发板和IgH EtherCAT主站实现伺服电机的精准控制。从硬件选型、实时内核配置到EtherCAT主站安装和核心代码实现,提供了一套完整的工业自动化解决方案,特别适合需要高精度运动控制的场景。

pca5navigator的博客 972

Ruby 中类方法和实例方法定义的几种方式

Ruby 的类方法也叫静态方法,通过类名来调用的方法。但实例方法,必须要 new 一个实例对象出来才能用。 常见的类方法和实例方法的定义如下: class HelloWorld def self.class_method puts "class method" end def instance_method puts "instance method" end end HelloWorld.class_method HelloWorl

Looking的网页备忘录和个人知识库 1339

从DDPM到DDIM:深入解读《Denoising Diffusion Implicit Models》

DDIM发表在ICRL2021上,是DDPM重要的改进之一,能显著提高DDPM的样本质量、减少采样时间,并且能显式控制插值,已经被广泛应用到现在的Diffusion Models上。这篇博客和大家一起详细解读一下DDIM,认识这一伟大的模型。.........

沉迷单车的追风少年 1万+

【ruby】ruby 动态方法总结

本文对ruby动态方法特性进行探讨。 结合以下例子:   Ruby代码   #dynamic methods   class Dynamic      def a        puts "this is method a"      end      def b(bob)        puts "this is method b:#{bob}" 

dazhi_100的专栏 915

三维点云转深度图

点云投影过程是将三维点云数据转化为二维图像坐标的关键步骤,它的实现涉及到相机内外参数的计算,包括相机的内部参数(如焦距和主点)和外部参数(如相机位置和方向)。具体来说,可以通过将每个点的三维坐标转换为相机坐标系下的坐标,然后使用相机内部参数和外部参数来计算在二维图像中的坐标。接着计算每个点的深度值,将深度值映射到像素值上,最后创建深度图像并将深度值赋给对应的像素值。这里需要注意的是,在将深度值映射到像素值上时,需要将像素值转换为 uchar 类型,否则在将深度值赋给像素值时会出现类型不匹配的错误。

点云兔子的博客 3171

(王道408考研操作系统)第三章内存管理-第一节1:内存基础知识、程序编译运行原理

注意:本节内容和《计算机组成原理》“存储器”那一部分内容相关性很强,组成原理是从硬件角度,操作系统是从软件角度。因此如果没有学习过这部分的同学,强烈建议先看这一部分 王道计算机组成原理笔记 本文主要会涉及以下必要的内存知识 文章目录一:内存及其作用 一:内存及其作用 内存:内存又称之为主存。是一种硬件设备,作为CPU和硬盘的缓冲区,用于解决其速度不匹配的问题,提高整机性能。程序执行前需要放入内存才能运行 ...

快乐江湖的博客 2792

Ruby 方法

Ruby 方法与其他编程语言中的函数类似。Ruby 方法用于捆绑一个或多个重复的语句到一个单元中。方法名应以小写字母开头。如果您以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用。方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常。

zhoufeii的博客 671

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ruby 类方法与实例方法_Ruby方法

ruby 类方法与实例方法 Ruby方法 (Ruby methods) Generally, methods tell the behavior of objects. A method is a set of predefined code which can be invoked any time in the code by its name. The method reduces redu...

524

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ruby中的bind方法_Ruby中的方法别名

ruby中的bind方法 To alias a method or variable name in Ruby is to create a second name for the method or variable. Aliasing can be used either to provide more expressive options to the programmer using th...

cumao2792的博客 357

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Ruby方法的重载和方法的覆盖

在Ruby编程语言中,方法覆盖(Overriding)和方法重载(Overloading)是面向对象编程中的两个重要概念。下面我将逐步解释它们的定义、在Ruby中的具体实现以及注意事项,帮助您清晰地理解这些机制。回答基于Ruby语言规范(以Ruby 3.x为例),确保内容真实可靠。如果您有具体代码场景或更多疑问,我可以提供进一步解释或优化建议!

2501_93581504的博客 1601

ruby each_在Ruby中使用Each方法

ruby each Every array and hash in Ruby is an object, and every object of these types has a set of built-in methods. Programmers new to Ruby can learn about how to use the each method with an array and...

cumao2792的博客 1730

ruby input html,Ruby 方法

Ruby 方法Ruby 方法与其他编程语言中的函数类似。Ruby 方法用于捆绑一个或多个重复的语句到一个单元中。方法名应以小写字母开头。如果您以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用。方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常。语法defmethod_name[([arg[=default]]...[, *arg[, &exp...

weixin_31458015的博客 260

Ruby 101:对象和方法

Ruby 101:对象和方法  Written by Allen Lee  从静态方法说起       在上一篇文章末尾,我们提到了受保护的静态方法……受保护的静态方法??Ruby的protected不是用来向相同类型的不同实例开放受限方法的访问的吗(忘记protected的用法了?不要紧,回去上一篇文章复习一下吧。),如果把它用于静态方法,那么我该向参数传入什么?

Allen Lee's Magic 1669

ruby之方法查找

ruby的方法和ruby的对象一样,也是很神奇的,跟C/C++、java等静态语言不一样,ruby的方法可以是动态生成的,本篇主要讲解一个ruby的方法以及其调用过程。 我们先讲调用过程,然后逐步深入解析。

feigeswjtu的专栏 1411

ruby单例方法 单例类_Ruby中的单例方法

ruby单例方法 单例类 Ruby| 单例方法 (Ruby | Singleton Methods) In the last tutorial frozen objects, we have studied the way to freeze the objects in Ruby. We can't assign singleton methods to the objects which ar...

cumtv80668的专栏 390

ruby静态方法

ruby静态方法 ruby学习笔记(8)-"静态方法的4种写法"与"单例方法的2种写法"01#静态方法的4种写法02classTest03defTest.StaticMethod104puts"Test.StaticMethod1"05end0...

129
上一篇: 软件的坏味道
下一篇: require 和 load
weeweee
博客等级 码龄16年 10粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值