【发布时间】:2017-01-17 14:53:56
【问题描述】:
这可能不是语言相关问题的特殊性。由于 Swift 是我目前正在学习的语言,所以我在这里使用它。
我从 Matt Neuburg 的书 iOS 10 Programming basics with Swift 中摘录了这句话
In Swift, "everything is an object" and an object
Object is something you can send a message to.
让我们添加一个示例。假设有一个名为 Dog 的客户类型。它具有 bark() 和 sit() 功能。两个名为 fido 和 rover 的 Dog 类型实例已启动。
In swift, the syntax of message-sending is dot-notating, like
fido.bark()
rover.sit()
rover.printName()
The above code lines means sending message to object fido and rover
问题 1:
为什么描述是:向对象 fido 和 rover 发送消息?在我看来,对象 fido 和 rover 发送了一些消息以在控制台中将其打印出来(例如 printName() ),而不是我们向它发送消息。 .bark() 看起来它会让 fido 做某事并向外部世界发出反应,因为 bark() 是它腹部的功能,而不是我们的东西创建并注入它的身体。我们只是通知这个函数它的工作时间。难道这个informing object做某件事就是向对象发送消息的意思吗?
问题 2:
"In Swift, everything is an object", an object is something you can send message to
如果我理解正确的话,即使对象类型本身也是一个对象。例如 String、Int 或 Double。因为 type 具有 type 属性,这意味着您可以向它发送消息
非常感谢您的宝贵时间
【问题讨论】:
-
“消息”语言学源于将 Swift 与其密切相关的老兄弟 Objective-C 进行比较,后者并不容易直接转化为我们人类所说的“消息”。我引用programming with Objective-C:“发送一个Objective-C消息在概念上非常像调用一个C函数”
-
@dfri 所以这里“发送”消息大致相当于“调用”C 内容中的函数
-
第一个问题,你可以简单理解:向对象发送消息调用对象的函数。这是 Apple 在其关于 Objective-C 的文档中使用的表达式。
-
@Hoa,实际上他们从
Smalltalk借用了sending message表达式,这是最早的OOP 语言之一。 ObjC 括号语法也基于Smalltalk语法。 -
至于问题2,见the following Q&A,描述得很好:“消息发送是这样执行的:
[obj message]。本质上,Obj-C中的对象就是任何响应的东西到消息。这意味着即使类也是对象。”.