在java里private方法在Java当中的含义是只在当前类范围之内可以调用,当前类的子类也无法访问,但能被同一类别的其他对象实例调用.protected方法在Java当中的含义是在当前类所在的整个package当中都可见,其他package类则无法访问;
ruby里private,protected都可以被子类继承,但是都不能被实例调用.
protected可以被同类的(含子类)的其他对象中调用.
irb(main):001:0> class AccessTest
irb(main):002:1> def test
irb(main):003:2> "test private"
irb(main):004:2> end
irb(main):005:1> def test_other(other)
irb(main):006:2> "other object" + other.test
irb(main):007:2> end
irb(main):008:1> end
=> nil
irb(main):009:0> t1=AccessTest.new
=> #<AccessTest:0xb773e620>
irb(main):010:0> t2=AccessTest.new
=> #<AccessTest:0xb7737334>
irb(main):011:0> t1.test
=> "test private"
irb(main):012:0> t1.test_other(t2)
=> "other objecttest private"
irb(main):013:0> class AccessTest
irb(main):014:1> private :test
irb(main):015:1> end
=> AccessTest
irb(main):016:0> t1.test
NoMethodError: private method `test' called for #<AccessTest:0xb773e620>
from (irb):16
from :0
#private 实例是调用不到的
irb(main):017:0> class AccessTest
irb(main):018:1> def tt
irb(main):019:2> 'tt'
irb(main):020:2> end
irb(main):021:1> protected :tt
irb(main):022:1> end
=> AccessTest
irb(main):023:0> t1.tt
NoMethodError: protected method `tt' called for #<AccessTest:0xb773e620>
from (irb):23
from :0
#protected 实例也调用不到(包括子类)
irb(main):024:0> class Sun < AccessTest
irb(main):025:1> end
=> nil
irb(main):026:0> s=Sun.new
=> #<Sun:0xb770f564>
irb(main):027:0> class Sun
irb(main):028:1> def tt2
irb(main):029:2> tt
irb(main):030:2> end
irb(main):031:1> end
=> nil
irb(main):032:0> s.tt2
=> "tt"
irb(main):033:0> class Sun
irb(main):034:1> def tt3
irb(main):035:2> test
irb(main):036:2> end
irb(main):037:1> end
=> nil
irb(main):038:0> s.tt3
=> "test private"
#protected可以被子类继承
irb(main):039:0> class AccessTest
irb(main):040:1> protected :test
irb(main):041:1> end
=> AccessTest
irb(main):042:0> s.test_other(s)
=> "other objecttest private"
#protected可以在同类(含子类)的其它对象的内部中使用
irb(main):043:0> s.test
NoMethodError: protected method `test' called for #<Sun:0xb770f564>
from (irb):43
from :0
irb(main):047:0> class Sun
irb(main):048:1> public :test
irb(main):049:1> end
=> Sun
irb(main):050:0> s.test
=> "test private"
#可以单独改变子类的方法的作用域
分享到:
相关推荐
从一个作用域进入另一个作用域的时候,局部变量会立即失效,为了让局部变量持续有效,可以通过规避关键字的方式,使用方法调用来代替作用域门,让一个作用域看到另一个作用域里的变量,从而达到目的。具体做法是
主要介绍了详解Ruby中的块的知识,包括yield语句和begin/end块等知识点,需要的朋友可以参考下
单件方法顾名思义,就是只作用于单个对象的方法,同理单件类就是单件方法所存在的类,规定其作用域,这里我们就来详解Ruby中的单件方法和单件类:
类与方法是面向对象编程语言中的典型特性,方法的概念与函数基本上相同,只不过类方法会受到类作用域的约束,这里我们就简单来看一下Ruby面向对象编程中类的方法与类的扩展
Ruby的Block块是它的关键特色之一,用块能够写出简明且高度可重用的算法。即使没有别的用处,它至少消弱了...Lambda是个十分令人迷惑的词汇,因为闭包这个词汇还指对代码作用域的捕获。而块则不需要捕获这个作用域。
return,break,next 这几个关键字的使用都涉及到跳出作用域的问题,而他们的不同 则在于不同的关键字跳出去的目的作用域的不同,因为有代码块则导致有一些地方需要格外注意。 return 常用方式 通常情况下的return...
HasScope 具有作用域允许您将传入的控制器参数映射到资源中的命名作用域。 想象一下以下模型,称为刻度: class Graduation < ActiveRecord> { where ( featured : true ) } scope :by_degree , -> degree { where ...
Proc是对块及其context(局部变量的作用域以及栈框架)进行对象化处理之后得到的过程对象。您可以像使用无名函数那样来使用Proc,但它不会导入局部变量的作用域(可以把动态局部变量用作Proc局部变量)。 在下例中,正...
方法可以理解为类中的函数,一定程度上可以受到类作用域的制约,其他地方和传统意义上的函数无太大区别,这里我们就一起来进行Ruby面向对象编程中类与方法的基础学习
联盟修补 ActiveRecord::Relation 允许联合作用域和有序联合作用域。 如果您有一个分片数据库,请注意跨分片查询的使用。安装将此行添加到应用程序的 Gemfile 中: gem 'ar_union' 然后执行: $ bundle或者自己安装...
3.5 标识名和变量的作用域..................................................................................................19 3.6 类库......................................................................
2021-03-12 v1.8.0更新=>作用域使其正常工作 2018年6月24日V1.7.0新增支持, 2017-05-26 v1.6.1修复了= config标题中的拼写错误 2017-05-18 v1.6.0在Rspec中添加了对eq支持 2016-08-01 v1.5.0将前缀支持添加到=...
Ruby的class关键字更像是一个作用域操作符,而不是类型声明语句。class关键字的核心任务是把你带到类的上下文中,让你可以在里面定义方法。 每个类都是一个模块,类就是带有三个方法(new,allocate,superclass)的...
return,break,next 这几个关键字的使用都涉及到跳出作用域的问题,而他们的不同 则在于不同的关键字跳出去的目的作用域的不同,因为有代码块则导致有一些地方需要格外注意。 return 常用方式 通常情况下的return...
rails-scope Ruby gem,它允许 nVisium 为评估目的准确自动地确定 Ruby on Rails 应用程序的范围。输出将包括代码复杂度路线控制器、视图和模型的数量控制器、视图和模型中的代码行以及正在使用的 RubyGems 的名称...
用于控制并发代码执行的抽象和构造:主管,取消作用域,限制,资源池等。 代码可以使用本机网络类和库,从而增加了对pg和redis等第三方gem的支持。 使用stdlib类,例如TCPServer , TCPSocket和OpenSSL::SSL::SSL...
请参阅与迁移旧懈怠应用到颗粒作用域帮助。 自己做 仅此库仅会注册一个新的机器人,而不会包含任何机器人功能。 为了使事情有用,我们建议您从 (处理一种事件)或 (句柄)开始各种事件)以引导您的项目。 用法 ...
您可以使用作用域访问器扩展单个类(及其子类),或者您可以扩展 ruby 的整个类层次结构。 安装 将此行添加到应用程序的 Gemfile 中: gem 'scoped_attr_accessor' 然后执行: $ bundle 或者自己安装: $ gem ...
在lambda中,return不是从proc中返回,而是从定义proc的作用域中返回. 代码如下: def one_method p = Proc.new{return 10} #调用这个块的时候,从p的作用域直接返回10,因此下面的return将不会执行 result = p....