简单谈谈Ruby的private和protected

 更新时间:2016年02月13日 14:55:26   投稿:hebedich  
Ruby类下对访问控制的限制也是用public,protected和private来做的。虽然用的是和C++和Java相同的名字,但是Ruby下的protected和private定义还是有所不同的。

下面这段程序让我纠结了很久,Ruby中private的概念真的很奇怪。。。

class Test private
 def test_print
  puts 'test'
 end
end

class Test2 < Test
 def test_print2
  # self.test_print #=> 这里加上self就不能调用,private method `test_print' called for # (NoMethodError)
  test_print #=> 不加self就能调用
 end
end

Test2.new.test_print2 

为什么不加self的话,private也可以调用父类的方法呢?

原来在Ruby中,private和Java或者其他语言不一样,子类也可以调用,只是不能指定调用者。

翻了下《The Ruby Way》,书上说:

private:类和子类都能调用,但是private方法不能指定调用者,默认为self。
protected:类和子类都能调用,可以指定调用者。

这就解释了为什么上面的代码中,用self调用会出错,而不加self就能正确执行。

相关文章

  • ruby will_paginate的用法

    ruby will_paginate的用法

    老版本的will_paginate是基于plugin方式的,其安装方式如下:ruby script/plugin install svn://errtheblog.com/svn/plugins/will_paginate
    2008-08-08
  • Ruby中Hash哈希结构的基本操作方法小结

    Ruby中Hash哈希结构的基本操作方法小结

    Hash是一种键值对应的数据结构,Ruby中直接带有Hash类来对其提供支持,这里我们整理了Ruby中Hash哈希结构的基本操作方法小结,首先来回顾一下Hash的基本知识:
    2016-06-06
  • Ruby实现网页图片抓取

    Ruby实现网页图片抓取

    本文给大家分享的是个人使用ruby编写的抓取网页图片的代码,十分的简单实用,有需要的小伙伴可以参考下。
    2016-04-04
  • 详解Ruby中的块的知识

    详解Ruby中的块的知识

    这篇文章主要介绍了详解Ruby中的块的知识,包括yield语句和begin/end块等知识点,需要的朋友可以参考下
    2015-05-05
  • 深入理解Ruby中的block概念

    深入理解Ruby中的block概念

    这篇文章主要介绍了深入理解Ruby中的block概念,文中给出了Javascript代码块与Ruby代码块的对比,需要的朋友可以参考下
    2015-04-04
  • Ruby字符串、条件、循环、数组、Hash、类基本操作笔记

    Ruby字符串、条件、循环、数组、Hash、类基本操作笔记

    这篇文章主要介绍了Ruby字符串、条件、循环、数组、Hash、类基本操作笔记,需要的朋友可以参考下
    2014-06-06
  • Ruby 中一些百分号(%)的用法小结

    Ruby 中一些百分号(%)的用法小结

    这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下
    2014-05-05
  • ruby基本数据类型简明介绍

    ruby基本数据类型简明介绍

    这篇文章主要介绍了ruby基本数据类型简明介绍,本文讲解了数值类型、字符串、区间、数组、散列表、符号等基本数据类型,需要的朋友可以参考下
    2015-05-05
  • Ruby版本管理工具RVM的安装和使用教程

    Ruby版本管理工具RVM的安装和使用教程

    这篇文章主要介绍了Ruby版本管理工具RVM的安装和使用教程,本文示例基于类Unix的系统环境,需要的朋友可以参考下
    2015-08-08
  • Ruby正则表达式详解

    Ruby正则表达式详解

    正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找字符串集合,这篇文章纤细介绍了Ruby大的正则表达式,文章有详细的代码示例,需要的朋友可以参考一下
    2023-04-04

最新评论