Day06 - Ruby三种存取限制:Public,Protected,Private

前情提要:

在第五天的最后,我们提到了一句话“相同的class的实体也无法使用别人的singleton method”。

在今天,我们把焦点放在Ruby的method,继续了解存取限制:)

Ruby经典面试题目#06
说明Ruby的三种存取限制。3 levels of access control for Ruby methods.

让我们用Ruby代码分别描述三种存取:Public,Protected,Private:

class TingsIronmanProcess
def publish
p“Hi guys,this is my IT article for today!”
end


protected
def mydraft
p“Hi Mentor!Please read my draft.“
end

private
def myspace
p“I'm writing secretly here!”
end
end

day6 = TingsIronmanProcess.new
day6.publish # => Hi guys,this is my IT article for today!
以我自己生产第六天IT赛文章为例,为了防止网络断线,或是在IT邦写完误按其他的钮导致存盘出现问题,我通常在本机环境上编写每天的主题。在这段时间要搜集素材、测试代码,这个过程可能会有很多生产上的秘密、需要删除的错误等等之类的,过程艰辛不足为外人道矣,所以放在private的myspace方法孤芳自赏就好(jxpue)。

等到文章接近完成度高、可读性佳的地步,就放在protected的环境,开放一些权限给它人阅读,例如请Ruby前辈'馒头猫'先校稿,提供修改建议。

所以如果在class外想要取得protected或private方法,都会出现NoMethodError错误:

day6.protected #=> undefined method `protected'(NoMethodError)
day6.private #=> undefined method `private'(NoMethodError)
当一切修改完毕,就可以品尝甜美果实,放到public区,给大众分享我的作品啦!

以上的类别写法可以改成:

class TingsIronmanProcess
def publish
p“Hi guys,this is my IT article for today!”
end

def mydraft
p“Hi Mentor!Please read my draft.“
end

def myspace
p“I'm writing secretly here!”
end

protected:mydraft
private:myspace
end
这种写法,我觉得蛮类似于在开发Ruby on Rails项目上时常看到类似的构架,哪些套件只能在开发环境development使用,哪些在测试环境test、哪些在正式环境production使用的分组。

gem 'sqlite3',group::development
gem 'pg',group::production
如果我想把第六天的草稿send给menter看,可以把mydraft当作参数,使用send()方法,结果如下:

day6.send(:mydraft)#=>“Hi Mentor!Please read my draft.“
甚至把文章连接先send给某个人看,也行:(要小心!别把不能公开的东西乱放啊!)

day6.send(:myspace)#=>“Hi guys,this is my IT article for today!
如果馒头猫也想使用我的构架来撰写自己的铁人赛文章,可以继承我的类别:

class TingsIronmanProcess
protected
def mydraft
p“Hi Mentor!”
end

private
def myspace
p“I'm writing secretly here!”
end
end

class BaterProcess < TingsIronmanProcess
def bater_draft
mydraft
end
def bater_self_draft
self.mydraft
end
end

BaterProcess.new.bater_draft # Hi Mentor!
BaterProcess.new.bater_self_draft #Hi Mentor!
在加入继承后的新类别,我们引入昨天self物件可以代替自身类别的观念。

以继承的类别来说,在此呼叫Protected method的方式,无论是self.mydraft或是mydraft,输出结果都是Hi Mentor!。

但如果呼叫的是Private method myspace呢?

class BaterProcess < TingsIronmanProcess

def bater_space
myspace
end
def bater_self_space
self.myspace
end
end
如果我们在这里使用.self,就会出错:

BaterProcess.new.bater_space # => I'm writing secretly here!

BaterProcess.new.bater_self_space # => private method `myspace'(NoMethodError)
龙哥的文章说到,呼叫private方法的时候,不能有明确的接收者。爱注意呀!

总结:在写铁人赛的文章时,我都尽可能地把前几篇的概念拿到后面来使用,增加自己观念上的熟悉度,尽量做到具有教育意义地环环相扣。(显示为八点档连续剧制作人?)

在今天Day6这篇文章里,我们把第二天继承和第四天self的概念拿来测试public、protect和private存取方法(xcsjbj),也发现了:

protected:mydraft
private:myspace
:mydraft,:myspace这些冒号在前面的参数。

这到底是什么呢?

明天我们就来讨论符号(Symbol)吧!:)

原文地址:https://www.cnblogs.com/lannyQ-Q/p/10721912.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


validates:conclusion,:presence=>true,:inclusion=>{:in=>[0,1]}validates:email,:presence=>true,:length=>{:minimum=>3,:maximum=>254},:uniqueness=>true,:email=>truevalidates:ending_order,
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各Master的状态,如果Master异常,则会做主从切换,将Slave作为master,将master做为slave。其配置也较复杂,且表现一般。redis3.0以后已经支持集群容错功能,并且非常简单1.1素材准备centos7(集群搭建,至少三个master。需
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow                 不知道大家是否注意到,全新安装ruby之后,无论是在windows或是linux还是macosX下使用rix
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 modify_my_object!,这个方法名是以!结尾,在ruby的对象里边是用于表达修改本身的意思。比如String#gsub,返回的是一个新的字符串对象;而String#gsub!,返回的是自身已经被修改的对象。不止!这样的特殊字符可以命名,ruby
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表达方式即编程语言,语言是沟通的介质,而编程语言是程序员与计算机沟通的介质。 什么是编程? 编程即程序员根据需求把自己的思想流程按照某种编程语言的语法风格编写下来,产出的结果就是包含一堆字符的文件。二编程语言分
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编程语言的特性包括:数据封装数据抽象多态性继承这些特性将在面向对象的Ruby中进行讨论。一个面向对象的程序,涉及到的类和对象。类是个别对象创建的蓝图。在面向对象的术语中,您
1.ruby的标签<ruby>漢<rp>(<p><rt>han<t><rp>)<p>字<rp>(<p><rt>zi<t><rp>)<p><uby> 
1、软件安装1.安装包是个压缩包-->解压到/homeedis_tar下命令如下: tar-zxvf./../-C/homeedis_tar2.安装c++环境yum-yinstallgcc-c++(注:redis底层源码是c++)3.解压后需要源码编译进入到redis-3.0.0后执行make4.编译完后开始安装需要指定一个安装路径
1.sass基于Ruby语言开发而成,因此安装sass前需要安装Ruby。(注:mac下自带Ruby无需在安装Ruby!)window下安装SASS首先需要安装Ruby,先从官网下载Ruby并安装。安装过程中请注意勾选AddRubyexecutablestoyourPATH添加到系统环境变量。ruby官网:https:/ubyinstaller.org/downloa
本节对我们项目实现的功能和知识点做一个简单的介绍,因为是RESTfulAPI项目,所以对于后端来说基本上没有什么UI界面可展示,那我们就在关键的点,使用客户端(Android)实现的效果图。课程简介这是一门企业级项目实战课程,目的是从0使用Rails开发一个企业级RESTfulAPI项目;他不能让你年薪30
注意点:1.redis集群至少需要6个节点。2.redis集群至少部署在3台服务器上。3.redis的版本需要在3.0以上。4.需要ruby的支持。步骤:1.安装依赖环境:yuminstallgcc-c++2.下载ruby-2.4.6,编译安装https://cache.ruby-lang.org/pububy/2.4uby-2.4.6.tar.gztarzxf ruby-2.4.6.
在我的客户项目中,我看到很多睡眠用法0.代码看起来像这样.whiletrue......sleep0end通过阅读SO的一些答案,如this,似乎睡眠0具有一定的意义.我现在想知道的是,在时间片0期间调度其他线程运行(如果它们正在等待运行)是像ruby或python这样的langVM的工作,或者它
前情提要:第11天开始,要更深入Ruby的精髓!Ruby经典面试题目#11Ruby的block,proc,lamdba方法比较?What’sdifferencebetweenblocks,procsandlambdas?block代码内存块代码内存块是用do…end围起来,围出特定一个区域、放代码的地方。就好像跑马拉松一样,道路上会进行交通管制,把参赛者
安装环境及工具系统:RedHatEnterpriseLinuxServer工具:XShell5及Xftp5等远程工具安装包:Ruby-2.4.1及以上       Rubygems-2.6.12及以上       Redis-3.2.8及以上(3.x版本才开始支持集群功能)       Redis-3.0.0-gem及以上(该版本不一定要和red
 今天在做Redis的Cluster集群的时候,在执行geminstallredis时,提示如下错误:geminstallredisERROR:Errorinstallingredis:redisrequiresRubyversion>=2.2.2.CentOS7yum库中ruby的版本支持到2.0.0,可gem安装redis需要最低是2.2.2,采用rvm来更新ruby:1
我试图在Rails4中制作应用程序.我正在挣扎.我正在尝试合并一个bootstrap主题,我遇到了供应商javascripts和其余代码的问题.我认为问题可能与在我的application.js中使用jQuery然后使用以’$’符号开头的供应商.js文件有关:$.circleProgress={我刚看过这个:https://learn.jqu
该内容全部为搬运,感谢作者的分享~,附有原文链接。使用ruby环境SASS学习系列之(一)---------SASS,SCSS环境搭建(Ruby) 使用node-sassSASS学习系列之(二)---------SASS,SCSS环境搭建(node-sass)通过命令编译:npmrunsassinput.scssoutput.csssass-loader在webpack打包里
我如何使用PHP5.3Closures,比如我们在Ruby中使用Blocks.我从来没有在Ruby中使用’for’循环,因为使用带有’each”read_all”inject’方法的块.我如何使用像Ruby块这样的PHP5.3闭包,并说再见’for’Loops
一、说明:搭建Redis集群时,安装geminstallredis报错: redisrequiresRubyversion>=2.2.2的报错,查了资料发现是Centos默认支持ruby到2.0.0,可gem安装redis需要最低是2.2.2二、解决办法:解决办法是先安装rvm,再把ruby版本提升至2.3.31.安装curlsudoyuminstal
compass.app是集成了sass的工具,安装完Compass就能够使用sass。首先,上官网 可以看到官网上推荐的两种sass使用方式,application&commandlineapplication里不仅仅只有Compass,不过现在点击Compass.app进行下载。虽然通常我们说sass运行在Ruby环境下,但Compass.app安装使用并不需要