![]() |
|
![]() ![]() ![]() |
|
wpp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 25.5.2003 Репутация: нет Всего: нет |
Что-то не пойму, (в документации ничего не нашел) как передаются параметры в методы? По ссылке или по значению? Или оба способа? Ткните, пожалуйста в документацию, где это описано.
|
|||
|
||||
skalex |
|
|||
![]() Хороший человек ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 895 Регистрация: 2.4.2004 Репутация: 5 Всего: 23 |
||||
|
||||
skalex |
|
|||
![]() Хороший человек ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 895 Регистрация: 2.4.2004 Репутация: 5 Всего: 23 |
Вот еще по ссылка по теме: http://www.ruby-forum.com/topic/41160#8084
|
|||
|
||||
Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: 2 Всего: 12 |
Методы, заканчивающиеся символом "!", изменяют объект. А вообще аргументы передаются по значению.
-------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
Rubynovich |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 7.6.2006 Репутация: 3 Всего: 3 |
Всегда по значению, а методы ! лучше не использовать. Поверьте старому еврею... "некошерные" они! |
|||
|
||||
Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: 2 Всего: 12 |
-------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
simanyay |
|
|||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: 6 Всего: 36 |
Это типа мне ActiveRecord::Base.save! нельзя использовать? ![]() «не верьте мне, голубчик, я недостаточно пожил на этом свете» Рома Воронежский. Это сообщение отредактировал(а) Cr@$h - 9.6.2006, 17:36 -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
Rubynovich |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 7.6.2006 Репутация: 3 Всего: 3 |
Шалом, когда идет связка методов типа:
То их использование будет только мешать, т.к. значение, которое вернул .join ты не получишь, а исковеркать массив уже исковеркал, причем ненужными данными. Использовать методы ! можно только тогда, когда нет связки (один метод) и необходимо присваивание. По своему опыту могу сказать, что вероятность такого случая стремиться к 0 (не в RoR). =) Это сообщение отредактировал(а) Rubynovich - 9.6.2006, 22:29 |
||||
|
|||||
Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: 2 Всего: 12 |
Не, до таких извратов дело не доходило... -------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
Rubynovich |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 7.6.2006 Репутация: 3 Всего: 3 |
Дойдет, и еще не до таких... вот кусок моей сегодняшней программы:
Это сообщение отредактировал(а) Rubynovich - 9.6.2006, 22:50 |
||||
|
|||||
Vanoha |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 30.6.2006 Где: Киев Репутация: 1 Всего: 1 |
Параметры в методы передаются не по значению, а как ОБЪЕКТЫ!!!
Иллюстрирующий пример:
В большинстве случаев это выглядит, как передача значения из-за следующего: в Ruby любая операция над объектом (кроме специальных "деструктивных" методов с '!') приводит не к модификации объекта, а к созданию новой копии этого объекта (не нового экземпляра этого класса, а именно новой копии объекта). Поэтому, если мы делаем что-то внутри метода над объектом, то получаем новый объект, а старый не модифицируем. При этом переменная из контектста вызова остается неизменной, т.к. она "именует" "старый" объект. Исключением являются Fixnum, Float, nil/false/true в силу специфики хранения и обработки (Float и Fixnum хранятся и обрабатывается вместе с "именем", а nil/false/true - вообще не имеют "экземпляров" как таковых). Именно поэтому в большинстве случаев все выглядит так, как если бы в метод передавалось значение (если не используются специальные методы изменяющие сам объект [с '!']). ID объекта в Ruby уникальны независимо от контекста, поэтому можете придумать свою проверку с использованием object_id, например:
Передача параметров в виде объекта дает следующие преимущества/функциональность: 1. нет копирования данных при вызове, что при сложных структурах дает выигрыш по скорости. 2. проще работать с уникальными методами объектов 3. просто работают методы, возвращающие/устанавливающие значения переменных объекта (ala "@var). Еще один пример, иллюстрирующий "подводные камни".
Это сообщение отредактировал(а) Vanoha - 30.6.2006, 13:12 |
||||||
|
|||||||
V.A.KeRneL |
|
|||
![]() Vadim A. Kazantsev ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 3.12.2006 Где: Moscow, Russia Репутация: 1 Всего: 14 |
Правильно! Спасибо, Vanoha. Хоть один внимательный участник нашёлся. Значит не пропадём! ![]() Фактические аргументы передаются в метод (и замещают тем самым формальные параметры) как объекты, т.е. ПО ССЫЛКЕ, а не по значению! Это сообщение отредактировал(а) V_A_KeRneL - 18.12.2006, 01:40 -------------------- «C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы» ---/)/)---(\.../)---(\(\ --(':'=)---(=';'=)---(=':') (")(")..)-(").--.(")-(..(")(") |
|||
|
||||
Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: 2 Всего: 12 |
Все правы. Просто одни имели в виду базовые классы для работы с числами (Numeric), а другие -- сложные объекты (строки, массивы и т.п.). В этом плане ruby не отличается от С. -------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
V.A.KeRneL |
|
|||
![]() Vadim A. Kazantsev ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 3.12.2006 Где: Moscow, Russia Репутация: 1 Всего: 14 |
А зря!.. Извращаться полезно! Не слушать доводы о том, что так делать низя, а надо всегда вот эдак, недвусмысленно советовал сам Бьерн Страуструп в книжке «Язык программирования C++». Хотя бы потому, что лучше запомнишь, если на собственной шкуре это испытаешь. Вот ты (Можно я на «ты», Петь? ![]() find_all есть в модуле Enumerable: http://www.ruby-doc.org/core/classes/Enume...rc/M003160.html А find_all! нету: http://www.ruby-doc.org/core/ -------------------- «C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы» ---/)/)---(\.../)---(\(\ --(':'=)---(=';'=)---(=':') (")(")..)-(").--.(")-(..(")(") |
|||
|
||||
Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: 2 Всего: 12 |
![]() Даже если речь идет о goto (кстати, со слов того же Страуструпа)?! Не, спасибо, я уже это проходил. ![]() Мне сейчас гораздо важнее и интереснее освоить разные алгоритмы, а не особенности языка (си не в счет)... Жаль, р-форум не пашет, здесь есть ссылки на некоторые диалоги. Помнится, кто-то из нашего общего с тобой начальства ( ![]() Хотя, конечно, в перспескиве...... ![]() -------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Ruby: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |