iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Ruby元编程基础学习笔记整理
  • 339
分享到

Ruby元编程基础学习笔记整理

学习笔记基础Ruby 2022-06-04 18:06:16 339人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

笔记一: 代码中包含变量,类和方法,统称为语言构建(language construct)。 # test.rb class Greeting def initialize(text) @tex

笔记一:
代码中包含变量,类和方法,统称为语言构建(language construct)。


# test.rb
class Greeting
 def initialize(text)
  @text = text
 end

 def welcome
  @text
 end
end
my_obj = Greeting.new("hello")
puts my_obj.class
puts my_obj.class.instance_methods(false) #false means not inherited
puts my_obj.instance_variables

result =>
Greeting
welcome
@text

总结:
实例方法继承于类,实例变量存在于对象本身。
类和对象都是ruby中的第一类值。

应用示例:


monGo api for ruby => Mongo::MongoClient

# testmongo.rb
require 'mongo'
require 'pp'

include Mongo

# the members of replcation-set
# test mongoDB server version 2.6.0
host = "192.168.11.51"
# The port of members
# If the port is 27017 by default then otherport don't need to assignment
otherport = ""
port = otherport.length != 0 ? otherport : MongoClient::DEFAULT_PORT

opts = {:pool_size => 5, :pool_timeout => 10}
# Create a new connection
client = MongoClient.new(host, port, opts)

# puts client.class
puts client.class.constants
puts client.instance_variables
puts client.class.instance_methods(false)


分别输出


Constant, Instance Attribute, Instance Method

笔记二:动态调用
当你调用一个方法时,实际是给一个对象发送了一条消息。


class MyClass
 def my_method(args)
  args * 10
 end
end
obj = MyClass.new

puts obj.my_method(5)
puts "**"
puts obj.send(:my_method, 6)

结果:


50
**
60

可以使用object#send()取代点标记符来调用MyClass#my_method()方法:


obj.send(:my_method, 6)

send()方法第一个参数是要发送给对象的消息,可以是符号(:symbol)或字符串,其他参数会直接传递给调用的方法。
可以动态的决定调用哪个方法的技术,成为Dynamic Dispatch。

笔记三:符号和字符串的区别
1. 符号不可变,可以修改字符串中的字符。
2. 针对符号的操作更快些。
3. 通常符号用来表示事物的名字。
例如:


puts 1.send(:+, 4) => 5
String#to_sym(),String#intern() => string to symbol
String#to_s(),String#id2name() => symbol to string
"caoqing".to_sym() => :caoqing
:caoqing.to_s() => "caoqing"

动态派发中使用模式派发(pattern dispatch)的方法。


puts obj.class.instance_methods(true).delete_if{ |method_name| method_name !~ /^my/}
result => 
my_method

笔记四:动态定义
使用Module#define_method()方法定义一个方法。


class MyClass
 define_method :my_method do |args|
  args * 3
 end
end
obj = MyClass.new
puts obj.my_method(10)

结果:30

单件方法允许给单个对象增加一个方法。singleton methods


# test.rb
str = "My name is caoqing."
def str.title?
 self.upcase == self
end

puts str.title?
puts str.methods.grep(/^title?/)
puts str.singleton_methods

结果:


false
title?
title?

笔记五:
类方法的本质,类是对象,类名是常量。在类上调用方法和对象调用方法一样:


obj.my_method
Cla.class_method

Duck Typing:对象能不能响应方法,可以是普通方法或者单件方法。
类方法的实质就是他们是类的一个单件方法。


def obj.method
 # method body
end

obj可以是对象引用,常量类名或self。

类宏(Class Macro)
Ruby对象没有属性,可以使用拟态方法定义属性。
Module#attr_*()方法中的一员来定义访问器。类宏不是关键字而是方法。

Eigenclass
单件方法按照常规的方法查找在祖先链无法找到保存的地方,obj是对象不能保存,也不能存在于class内,否则所有的实例都可以共享这个方法。
对象拥有一个特有的隐藏类,称为该对象的eigenclass。
进入eigenclass作用域:


class << obj
 code
end

如果想获取eigenclass的引用,则可以在离开该作用域时返回self:

附录:
类变量,实例变量,类方法,实例方法区别
@@ :var类变量
@ :实例变量
self(?clas,::).method :类方法
method :实例方法


# test.rb
class Foo
 @@var = "lion"
 def self.method01
  puts "cat"
  @name = "cat"
  @@var = "cat"
  puts @name
 end

 def self.method02
  puts "tiger"
  @name = "tiger"
  @@var = "tiger"
  puts @name
 end

 def self.method03
  puts "dog"
  @name = "dog"
  @@var = "dog"
  puts @name
 end

 def putsname
  puts @name
  puts @@var
 end
end

obj = Foo.new
# obj.method01   => (NoMethodError)

obj.putsname   => lion

Foo.method01
Foo.method02
Foo.method03
obj.putsname

结果:


lion
cat
cat
tiger
tiger
dog
dog

dog

--结束END--

本文标题: Ruby元编程基础学习笔记整理

本文链接: https://www.lsjlt.com/news/14517.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP学习笔记:面向对象编程基础
    导言:面向对象编程(Object-Oriented Programming,简称OOP)是一种编程的思维方式,通过将问题分解为多个对象并定义对象之间的交互,来解决复杂的编程问题。PHP作为一门功能强大的编程语言,也支持面向对象编程。本文将介...
    99+
    2023-10-21
    PHP 基础 面向对象编程(OOP)
  • python学习笔记01-基础
    数据类型:(1)整数(2)浮点数整数和浮点数在计算机内部存储的方式是不同的(3)字符串字符\本身也要转义,所以\表示的字符就是\Python还允许用r''表示''内部的字符串默认不转义(4)布尔值在Python中,可以直接用True、F...
    99+
    2023-01-31
    学习笔记 基础 python
  • Python学习基础笔记(全)
    换博客了,还是csdn好一些。 Python学习基础笔记 1.Python学习—linux下Python3的安装 2.Python学习—数据类型、运算符、条件语句 3.Python学习—循环语句 4.Python学习—字符串 5.Pyt...
    99+
    2023-01-31
    基础 笔记 Python
  • python基础概念学习笔记
    本次整理python数据类型为:列表list字典dict元组tuple集合set其中涉及概念:模组module类class对象object——————————————————————————————————————————数据类型type ...
    99+
    2023-01-31
    学习笔记 概念 基础
  • mysql学习笔记之基础测试
    10. 基础测试 10.1...
    99+
    2024-04-02
  • JAVA编程学习笔记
    常用代码、特定函数、复杂概念、特定功能……在学习编程的过程中你会记录下哪些内容?快来分享你的笔记,一起切磋进步吧! 一、常用代码 在java编程中常用需要储备的就是工具类。包括封装的时间工具类。htt...
    99+
    2023-09-03
    java 学习 笔记
  • Python学习笔记整理(七)Pytho
    一、元组介绍 元组(tuple)是无法修改的其他对象的结合.元组由简单的对象构成,元组与列表类似,不过元组不能在原处修改。通常写成圆括号中的一系列项。 1、元组的属性 *任意对象的有序集合 与字符串和...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(五)Pytho
    列表和字段,这两种类型几乎是Python所有脚本的主要工作组件。他们都可以在原处进行修改,可以按需求增加或缩短,而且包含任何种类的对象或者被嵌套。 一、列表 列表的主要属性: *任意对象的有序集合 ...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(八)Pytho
      程序由模块构成 模块包含语句 语句包含表达式 表达式建立并处理对象 一、Python语句 语句 角色 列子 赋值 创建引用 a,b,c='good','bad...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(十五)类的编写
    类代码编写细节 一、class语句 一般形式 class    <name>(superclass,...):     data=value     def mothod(sel...
    99+
    2023-01-31
    学习笔记 Python 十五
  • java基础学习笔记:一文带你搞懂网络编程
    1. 网络编程学习...
    99+
    2023-06-02
  • Python学习笔记整理(四)Pytho
    字符串是一个有序的字符集合,用于存储和表现基于文本的信息。 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3="""...""" 三重引号块 T4=r'...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(六)Pytho
    一、字典介绍 字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。 1、字...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(十)Pytho
    if语句是选取要执行的操作. 一、if语句 1、通用格式 形式是if测试,后面跟着一个或多个可选的elif(else if)测试,以及一个最终选用的else块。测试和else部分可以结合嵌套语句块,缩进列在行首...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(二)pytho
    一、Python的数字类型 1、数字常量 python数字类型在程序中如何显示(换句话说,作为常量) 数字            常量 1234,-23,0        一般整数 9999...
    99+
    2023-01-31
    学习笔记 Python pytho
  • Python学习笔记整理(一)pytho
    Python对象类型 说明:python程序可以分解成模块,语句,表达式以及对象。 1)、程序由模块构成 2)、模块包含语句 3)、语句包含表达式 4)、表达式建立并处理对象 一、...
    99+
    2023-01-31
    学习笔记 Python pytho
  • Python学习笔记整理(九)Pytho
    赋值语句,表达式语句,打印 一、赋值语句 赋值语句给对象命名,基本形式是在等号左边写赋值语句的目标,右边写赋值的对象。左边可以是变量名或对象元素,而右侧的对象可以是任何会计算得到的对象表达式 。 1、赋值...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • 韩顺平 2021零基础学Java 学习笔记
    韩顺平 2021零基础学Java 学习笔记(1)(自用)_丨shallow丨的博客-CSDN博客_韩顺平java笔记 韩顺平 2021零基础学Java 学习笔记(2)(自用)_丨shallow丨的博客-CSDN博客  韩顺平 2021零基础...
    99+
    2023-10-01
    学习
  • Python学习笔记整理(十二)Pyth
    一、函数基础 函数可以计算出一个返回值。作用:最大化代码重用,最小化代码冗余,流程的分解 1、函数相关的语句和表达式 语句        例子 Calls        myfunc(‘diege',...
    99+
    2023-01-31
    学习笔记 Python Pyth
  • Python学习笔记整理(十三)Pyth
    一、模块 模块是Pyhon最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。实际的角度,模块往往对应Python程序文件。 每个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量名。模块可以...
    99+
    2023-01-31
    学习笔记 Python Pyth
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作