`
Anleb
  • 浏览: 32741 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于ruby的methods、instance_methods、method三者的区别

阅读更多
class A
    def self.ask1
        puts "the method of class"
    end
    def ask2
        puts "the method of instance"
    end
end



#类的实例对象的方法,方法属于类所生成New出来的实例对象。
p a.methods.length
p a.class.instance_methods.length
p A.instance_methods.length
p a.public_methods.length
p a.class.public_instance_methods.length
输出:50

说明上面5种方式都是输出实例对象的方法


#增加a实例的单件方法
def a.tell

end
p a.methods.length
p a.class.instance_methods.length
p A.instance_methods.length
p a.public_methods.length
p a.class.public_instance_methods.length


输出:51 50 51 50
说明:类的instance_methods包括的只有他所拥有的实例方法,并不包含单件类的方法。并且methods方法其实和Public_methods一样的,有别于private_methods


#类的方法,方法属于类自己
p A.methods.length
p A.class.instance_methods.length
p A.public_methods.length
p A.class.public_instance_methods.length

输出:87 86 87 86

注:这里根据版本不同,1.8.6和1.9.2是有差别的。


现在说一下,method方法

这个方法属于Method类,最常用的就是检查方法的参数个数,如下:
class A
    def self.ask1(n1,n2)
        puts "the method of class"
    end
    def ask2(n1)
        puts "the method of instance"
    end
end

a=A.new
p a.method(:ask2).arity
p A.method(:ask1).arity


输出:1 2

这里不拘泥于所有方法的介绍,介绍的是比较常用的方法。



9
11
分享到:
评论

相关推荐

    label_break_ruby_Metaprogramming_

    `Module#define_method`用于动态定义方法,`Object#methods`和`Object#instance_variables`则分别用于查看对象的方法列表和实例变量。 例如,如果我们想为数组添加一个新的方法,允许我们查找最小值,可以这样做: ...

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

    puts obj.class.instance_methods(true).delete_if { |method_name| method_name !~ /^my/ } ``` **输出结果:** ``` my_method ``` #### 四、动态定义(Dynamic Definition) Ruby支持动态定义方法的能力,这可以...

    Ruby元编程第二版中文

    1. **方法定义与调用**:Ruby允许在运行时定义和修改方法,如`define_method`函数可以动态创建方法,而`send`或`__send__`则用于在运行时调用方法。 2. **类与模块操作**:Ruby的`Class.new`和`Module.new`可以用来...

    ruby metaprograming

    根据给定文件的信息,这里似乎存在一定的混淆,因为文件内容主要涉及的是IBM Lotus Domino 7邮件服务器的配置指南,而非“Ruby元编程”。不过,基于您的需求,我将重点围绕“Ruby元编程”这一主题来生成相关的知识点...

    Ruby元编程pdf

    10. **反射(Reflection)**:Ruby提供了一系列的内省方法,如`methods`,`instance_variables`,`ancestors`等,允许程序检查自身结构,这对于调试和元编程非常有用。 通过熟练掌握上述概念和技巧,Ruby开发者可以...

    Ruby.Pocket.Reference

    - Discusses naming conventions for methods in Ruby, including the use of lowercase letters and underscores for method names. 17. **Default Arguments** - Explains how to define methods with default ...

    Ruby Pocket Reference

    - **Method Use:** Methods are central to Ruby's object-oriented nature. The book covers the syntax for defining and calling methods, including default and variable arguments. - **Classes and Modules ...

    Ruby袖珍参考手册

    ### Ruby袖珍参考手册知识点概览 #### 一、书籍简介 《Ruby袖珍参考手册》是一本旨在帮助Ruby开发者快速查找所需知识点的手册。无论你是通过Rails框架接触Ruby,还是因为Ruby是一种干净、强大且表达力丰富的语言而...

    Ruby on Rails中的include和extend的常见用法

    在这种情况下,`Car`只会获得`Base`模块中的类方法,而不会得到`InstanceMethods`模块中的实例方法。尝试通过`Car.new.love`调用`love`方法会导致`undefined method 'love'`的错误,因为`love`是实例方法,而不是类...

    reflexive:Reflexive是一个基于Web的实时课程和源代码浏览器-Web live source code

    反身 Reflexive是一个基于Web的实时类和源... Reflexive基于标准的1.9.2 Ruby库,该库使用Method/UnboundMethod类,用于反射的methods/instance_methods方法和用于代码导航的Ripper解析器。 Checkout 博客文章,以进行

    Ruby面向对象编程中类与方法的基础学习

    - **方法与函数的区别**:尽管在Ruby中方法和函数很相似,但方法更加强调对象导向的概念,它们总是与某个对象相关联。 #### 四、打开类与猴子补丁 - **打开类技术**:Ruby允许开发者在程序运行时修改现有的类定义,...

    charizard_attack

    在实际的项目中,"charizard_attack"游戏的开发者可能还会利用Ruby的元编程能力,如定义方法动态地(`define_method`)或者在运行时检查对象的属性(`instance_variable_get`和`instance_variable_set`)。...

    Ruby面向对象编程详解

    Ruby是一种完全基于面向对象编程(OOP)的语言,它的核心特性就是对象。在Ruby中,一切皆对象,包括基本类型如字符串、数字以及布尔值true和false。甚至类自身也是一个对象,它属于Class类的实例。面向对象编程的...

    ruby元编程实际使用实例

    7. **Class Methods and Instance Methods**: 示例中的`Frigga::RPC::#{rpc_class}`引用的是一个类方法,而`define_method`和`alias`则在`Runner`类的实例上下文中使用,这意味着它们定义的是实例方法。 8. **...

    student-classes

    在Ruby编程语言中,"student-classes"通常指的是创建一个表示学生的类,用于模拟和管理学生数据。在软件开发中,特别是在教育管理系统的构建中,这样的类是非常常见的。接下来,我们将深入探讨如何在Ruby中创建和...

    W5D4

    1. **面向对象编程(Object-Oriented Programming, OOP)**:Ruby的核心就是OOP,每个数据都是一个对象,每个对象都有自己的属性(instance variables)和方法(methods)。类(Class)定义了对象的行为和属性,对象...

    Pokemon-OO-Replationships

    这些属性通过实例变量(Instance Variables)如`@name`来存储,并通过方法(Methods)如`name`和`species`来访问和修改。 接着,我们可以利用继承(Inheritance)来创建特定种类的宠物小精灵,例如`Bulbasaur`、`...

Global site tag (gtag.js) - Google Analytics