是否可以定义仅对它们所定义的类可用的属性,以及该类的子类?
换句话说,有没有办法定义受保护的属性?
是否有理由申报私人伊娃@interface而不是@implementation?
我在整个互联网上看到这样的代码(包括Apple提供的文档):
foo.h中
@interface Foo : NSObject {
@private
id _foo;
}
@end
Run Code Online (Sandbox Code Playgroud)
Foo.m
@implementation Foo
// do something with _foo
@end
Run Code Online (Sandbox Code Playgroud)
头文件定义了一个类的公共接口,而一个私有的ivar是...... well ... private.那么为什么不这样声明呢?
foo.h中
@interface Foo : NSObject
@end
Run Code Online (Sandbox Code Playgroud)
Foo.m
@implementation Foo {
@private
id _foo;
}
// do something with _foo
@end
Run Code Online (Sandbox Code Playgroud) 新到Rails并试图围绕让我的头的时候/为什么要使用:symbols,@ivars,"strings"的框架内.
我想我从概念上理解它们之间的差异
:symbol每个项目只有一个实例@ivar每个实例一个"strings"- 因为它们是在引用时创建的(?)随意纠正我!
主要的困惑来自于理解Rails期望的规则和惯例 - 在哪里以及为什么?
我确定有一个"啊哈!" 那一刻即将到来,但我还没有...因为它对我来说似乎很随意(来自C/Obj-C).
-谢谢
我正在创建一个查询构建器类,它将帮助从URL params构建mongodb的查询.除了使用基本的语言结构和使用django的内置模型之外,我从未做过太多面向对象的编程,或者设计了除我自己以外的人使用的类.
所以我有这QueryBuilder门课
class QueryHelper():
"""
Help abstract out the problem of querying over vastly
different dataschemas.
"""
def __init__(self, collection_name, field_name, params_dict):
self.query_dict = {}
self.params_dict = params_dict
db = connection.get_db()
self.collection = db[collection_name]
def _build_query(self):
# check params dict and build a mongo query
pass
Run Code Online (Sandbox Code Playgroud)
现在,_build_query我将检查params_dict和填充,query_dict以便将其传递给mongo的find()功能.在这样做时,我只是想知道是否有一个绝对正确的方法,因为是否_build_query应该返回字典或是否应该只修改self.query_dict.因为它是一个内部方法,我认为只需修改即可self.query_dict.是否有正确的方法(pythonic)接近这个?这只是愚蠢而不是重要的设计决定吗?任何帮助表示赞赏.
我是Java的新手,我正在学习封装,并看到了一个示例,其中实例变量在类中声明为私有.
http://www.tutorialspoint.com/java/java_encapsulation.htm
我有2个查询:
你可以用一个例子来解释,如果在Java中的类中将实例变量声明为public,会出现什么问题?
我正在读一本关于Objective-C的书,作者说如果局部变量没有赋值,它们将被设置为nil,但静态变量将被设置为零.所以,我设置int a并没有给它赋值.然后NSLog(@"%i", a)显示它并a显示为零.我对此感到有些困惑,我想知道是否有人可以为我澄清一下?
静态变量和实例变量之间有什么区别.以下句子是我无法得到的:
在某些情况下,类的所有对象只应共享特定变量的一个副本 - 这里使用静态变量.
静态变量表示类范围信息.类的所有对象共享相同的数据.
我认为实例变量是使用类宽,而静态变量只在自己的方法中有范围?
我得到了指向官方Oracle文档的链接:https : //docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
据说:
默认值
声明字段时,不一定总是需要分配值。编译器会将已声明但未初始化的字段设置为合理的默认值。通常,此默认值将为零或null,具体取决于数据类型。但是,通常认为依赖于此类默认值是不好的编程风格。
我想强调这一部分:
但是,通常认为依赖于此类默认值是不好的编程风格。
但是,天哪,我想这是语言规范的基本组成部分,因为它知道实例变量具有默认值。如果即使在Java SE库源代码中也广泛使用它,那么到底为什么这是一种不好的编程习惯呢?
我希望子类从其父级继承类级实例变量,但我似乎无法弄明白.基本上我正在寻找这样的功能:
class Alpha
class_instance_inheritable_accessor :foo #
@foo = [1, 2, 3]
end
class Beta < Alpha
@foo << 4
def self.bar
@foo
end
end
class Delta < Alpha
@foo << 5
def self.bar
@foo
end
end
class Gamma < Beta
@foo << 'a'
def self.bar
@foo
end
end
Run Code Online (Sandbox Code Playgroud)
然后我想要这样输出:
> Alpha.bar
# [1, 2, 3]
> Beta.bar
# [1, 2, 3, 4]
> Delta.bar
# [1, 2, 3, 5]
> Gamma.bar
# [1, 2, 3, 4, 'a']
Run Code Online (Sandbox Code Playgroud)
显然,这段代码不起作用.基本上我想为父类继承的类级实例变量定义一个默认值.对于子子类,子类中的更改将是默认值.我希望这一切都能在不改变影响其父母或兄弟姐妹的一个类的价值的情况下发生.Class_inheritable_accessor给出了我想要的行为......但是对于一个类变量.
我觉得我可能会问得太多.有任何想法吗?
以下是M Hartl的Ruby on Rails教程中的一些代码.任何人都可以解释为什么实例变量(@user)是必要的,为什么不使用局部变量.此外,由于实例变量应该是类实例中的变量,哪个类是@user实例化的?
require 'spec_helper'
describe User do
before { @user = User.new(name: "Example User", email: "user@example.com") }
subject { @user }
it { should respond_to(:name) }
it { should respond_to(:email) }
end
Run Code Online (Sandbox Code Playgroud) java ×3
objective-c ×3
ruby ×3
oop ×2
class ×1
inheritance ×1
null ×1
properties ×1
protected ×1
python ×1
rspec ×1
scope ×1
string ×1
symbols ×1
visibility ×1