Abstract type: Difference between revisions

imported>Acediast
(→‎Interface: added explicit scope delimiters for COMPUTE)
imported>Regattaguru
(5 intermediate revisions by 2 users not shown)
Line 1,013:
{{trans|Go}}
<syntaxhighlight lang="emal">
^|EMal doesn'tdoes not support abstract types with partial implementations,
|but can use interfaces.
|^
Line 3,243:
 
The act of giving a signature to a module is called ascription. There are two type of ascription:
Transparent (written <tt>:</tt>) and opaque (written <tt>:></tt>). If a structure is ascribed transparently,
none of the types are abstract. If it is ascribed opaquely, all types are abstract by default, but can be specified
explicitly in the signature, in which case they are not abstract.
Line 3,267:
Then say we have a structure ListQueue which implements queues as lists. If we write <tt>ListQueue :> QUEUE</tt>
then the queue type will be abstract, but if we write <tt>ListQueue : QUEUE</tt> or <tt>ListQueue : LIST_QUEUE</tt> it won't.
 
=={{header|Swift}}==
Swift uses Protocols to provide abstract type features. See [https://docs.swift.org/swift-book/documentation/the-swift-programming-language/protocols/ the docs]
 
A trivial example showing required properties and methods, and the means of providing a default implementation.
<syntaxhighlight lang="sml">
protocol Pet {
var name: String { get set }
var favouriteToy: String { get set }
 
func feed() -> Bool
 
func stroke() -> Void
 
}
 
extension Pet {
// Default implementation must be in an extension, not in the declaration above
 
func stroke() {
print("default purr")
}
}
 
struct Dog: Pet {
var name: String
var favouriteToy: String
// Required implementation
func feed() -> Bool {
print("more please")
return false
}
// If this were not implemented, the default from the extension above
// would be called.
func stroke() {
print("roll over")
}
}
 
</syntaxhighlight>
 
=={{header|Tcl}}==
Line 3,422 ⟶ 3,463:
 
The Go example, when rewritten in Wren, looks like this.
<syntaxhighlight lang="ecmascriptwren">import "./fmt" for Fmt
 
class Beast{
Anonymous user