Я пытаюсь выяснить, является ли Clojure тем, что может полностью заменить парадигмы, к которым я привык на других языках. Одна вещь, которую я не понимаю, заключается в том, как идиоматически добиться инкапсуляции в Clojure (путем инкапсуляции я имею в виду объединение данных с помощью методов (или других функций), работающих с этими данными).
Вот пример использования OOP:
var apple = {
type: "macintosh",
color: "red",
cost: 5
markup: 1.5
getInfo: function () {
return this.color + ' ' + this.type + ' apple';
}
getPrice: function(){
return this.cost * this.markup;
}
}
ИЛИ аналогично:
var person = {
birthdate: '8/30/1980',
firstname: 'leeroy',
middleinitial: 'b',
lastname: 'jenkins',
getAge: function () {
return -(new Date()
- new Date(this.birthdate));
}
getFullFormattedName: function () {
return capitalize(this.firstname+' '+this.middleinitial+' '+this.lastname;
}
}
Часто бывает удобно связать поведение с данными таким образом, но каков идиоматический способ, которым Clojure позволяет решить эту проблему?