首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于表示数字事物的子类SmallInteger?

用于表示数字事物的子类SmallInteger?
EN

Stack Overflow用户
提问于 2019-04-26 22:43:33
回答 4查看 131关注 0票数 3

我想代表一个电视国家代码(如瑞典46或阿根廷54 )。这是一个小的正整数。

1)子类SmallInteger是建模的好主意吗?

在代码浏览器中尝试此操作时,我得到:

代码语言:javascript
复制
SmallInteger immediateSubclass: #CountryCode

2)我不知道immediateSubclass:是什么意思,而不是subclass:

3)如何创建CountryCode的实例?因为SmallIntegers只能通过算术创建?

我知道我可以使用封装,只需在我自己的CountryCode类中拥有一个CountryCode

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-04-27 08:00:59

  1. 在可能的情况下,构图通常比子类更可取。特别是像SmallInteger这样的核心类的子类不是一个好主意(而且可能根本不起作用),因为有2
  2. 定义为immediateSubclass:的类是VM处理的特例子类。该值不是对象指针,而是直接存储在对象标头中。我认为VM需要了解每种特定类型的immediateSubclass:来处理编码/解码/JIT代码生成。
  3. 您已经开始看到创建数字子类的问题了。(还有其他的)您可以创建一个对象子类,并让它代理一个数值ivar,但如果您的对象使用#isKindOf:等进行测试,它本身可能还不足以完全令人信服地作为一个数字。如果您真的想要这样做,您可能希望使您的类成为一个Integer的子类,其中包含您的数值ivar,然后再做所有您将对其进行代理的正常操作。(也就是说,要么创建性能和调试所需的所有方法,要么实现#doesNotUnderstand:,将消息转发给它并与缺点共存)

这就是说,问问自己,为什么你真的需要这样做作为一个国家的代码?是的,这是一个数字,但是你真的要用它做数字的事情吗?(把两个国家代码加在一起,国家代码* 10,一个国家代码的平方根意味着什么,等等)。您需要专门化,还是代码只是一个没有特殊行为的数值?我怀疑更好的解决方案是创建一个Country或CountryCode类作为Object或其他顶级模型类的子类。然后,您可以为国家代码(很可能是SmallInteger)添加一个ivar,为国家名称添加另一个ivar,并在需要时向其中添加一个#asInteger#asNumber方法。

票数 3
EN

Stack Overflow用户

发布于 2019-04-27 07:57:19

1)从整数继承有什么好处?对国家代码执行算术?一个国家的代码完全需要一个类吗?为了什么行为?

2)直接子类是一个实现细节。普通对象是指针(面向对象的指针)。直接对象包含数据而不是指针。虚拟机通过低位非零来识别它们。普通地址对齐为4、8或16字节,并将低位设置为零。

3)不能创建即时对象,不能分配内存(新的),也不能对它们进行子类。只有VM可以,是的,这总是通过算术为SmallInteger。

所以是的,作文可能是你所需要的。Country有一个小整数的telefon代码(在实例变量中),还可能有其他特性(名称.)。

票数 2
EN

Stack Overflow用户

发布于 2019-04-27 11:11:17

例如,将国家代码封装在类TelephoneNumber中就足够了,不是吗?

我想您可能需要国家和代码之间的映射,还需要一些工具来解析和验证电话号码字符串。我不认为有必要在自己的类中对代码进行建模。

因此,我会尝试封装,并坚持到被证明是错误的(这应该是显而易见的)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55875720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档