bolk (bolk) wrote,
bolk
bolk

Category:

ООП в R

Я думал, нет, даже надеялся, что присваивания в «Эр» единственная запутанная вещь. Не тут-то было — с ООП всё гораздо хитрее. Я и раньше видел языки, где несколько систем типов (Пайтон, Джаваскрипт), но в «Эр» есть три встроенные системы (S3, S4, RC (она же R5)) и несколько реализумых через внешние модули — например R6 и R.oo.

Я надеялся, что это отражение некой эволюции, но нет, некоторые апологеты языка рекомендуют использовать разные реализации в разных случаях, говорят, что каждая из систем несёт в себе определённые удобства.

Удобства я пока не ощутил, каждая из система плоха, на мой вкус, зато изучая здешние объектные модели, наткнулся на интересное.

Каждая функция создаёт, как обычно, свою зону видимости, насколько я понял, тут она зовётся «окружением», причём из вложенной функции можно обращаться в окружения выше, если я правильно понимаю, сколь угодно далеко, пока не упрёшься в глобальное окружение — верхний уровень программы.

Самое интересное, что окружениями можно манипулировать — это обычные объекты, которые содержат в себе текущие переменные. В итоге сэмулировать собственный класс без затей и претензий можно вот так:
NewCat <- function() {
	phrase <- 'Meow'

	say <- function() {
		print(phrase)
	}

	environment()
}

cat = NewCat()
cat$phrase # Meow
cat$say() # Meow
В «Эр» функции возвращают последнее значение, тут последним создаётся объект окружения, который возвращает в себе свою зону видимости и с которым можно работать как со списком (доллар — такой синтаксический сахар обращения к элементу списка).

При желании достаточно многое можно сделать с таким подходом (наследование, например), но я всё же буду изучать более естественные способы создания объектов.

Subscribe

Recent Posts from This Journal

  • Ортопедические стельки

    В своих поисках того как можно облегчить состояние травмированной когда-то на спортивной гимнастике спине, забрёл к ортопеду. Я подозревал, что…

  • Монета Михаила Фёдоровича

    Давно хотел в свою коллекцию какую-нибудь допетровскую монету и вот, — заполучил, наконец, копейку Михаила Фёдоровича, первого русского царя из…

  • Темп речи

    Сейчас многие компании переходят на удалённый или гибридный режим работы. Наша компания не исключение. Хотя я до сих пор искренне считаю, что…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments