为什么动态语言缺乏在类中定义私有成员的能力? 此功能是否有任何实施问题?是否可以为动态语言实现此功能?
答案 0 :(得分:2)
这类事情有无数答案,“为什么X语言不具有Y?”答案很简单,因为参与创建/发展语言的人并没有把它放在那里。计算机语言就像<insert anything here that has variations across members in the set>
,并非所有都是相同的。 (我们大多数人都感谢。;)
Oy,移动目标问题......
我不是Objective-C的专家,但是快速搜索“动态语言中的私有成员函数”发现了一些似乎暗示Objective-C确实拥有私有成员支持类的命中。
答案 1 :(得分:2)
这可以针对动态语言实施。事实上,在Smalltalk中,所有成员都是私人的。
这种情况不常见的原因是公共和私人成员都没有意义。作为设计问题,外部代码不应访问其他类的内部。这可以通过不这样做来实现 - 不小心做到这一点并不容易。
Python通过将所有内容都公开来解决这个问题,并允许程序员在必要时执行此操作,从而创建最大的灵活性。 Smalltalk通过将所有内容都设置为私有来解决这个问题,如果需要从其他代码访问,则强制程序员创建访问器。
至于实现问题,访问检查相对昂贵(因为对于至少一些属性访问,将有额外的操作,规则越细微,检查越复杂),所以私有和所有公共模型比具有中间访问级别的任何模型更具吸引力。
答案 2 :(得分:0)
您可以在Objective-C中使用类扩展来创建其他类不可见的内容。实施例
//at the top of MyClass.m
@interface MyClass ()
@property (strong, nonatomic) id myPrivateProperty;
@end
除此之外,没有什么可说的,因为这个问题太宽泛了(仍然)。
答案 3 :(得分:0)
或者,除了@Mettable的答案:
@interface MyObject : NSObject {
@private
id _myIvar;
id _myOtherIvar;
}
.
.
.
@end
我不了解Python,但我认为this SO answer可能有所帮助。