
06.04.2010, 23:57
|
|
Познающий
Регистрация: 06.07.2009
Сообщений: 54
С нами:
8867850
Репутация:
17
|
|
Например у объекта класс .class это Class а superclass это Object
в свою очередь у Class класс это он сам и есть, а superclass это Module и так далее..
это в 1.8
|
|
|

07.04.2010, 15:05
|
|
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
С нами:
10158086
Репутация:
1359
|
|
Сообщение от Flcn
Например у объекта класс .class это Class а superclass это Object
в свою очередь у Class класс это он сам и есть, а superclass это Module и так далее..
это в 1.8
эээ... ну чтото вы путаете. class и superclass это не термины руби
class - это класс
superclass - это класс предок(наследованный класс)
Код:
class Tree
...
end
class Oak < Tree
...
end
myOak = Oak.new
Тогда классом для myOak будет Oak, a superclass для myOak будет Tree.
ответ придумайте сами. и то класс и это
Последний раз редактировалось geezer.code; 07.04.2010 в 15:49..
|
|
|

02.06.2010, 02:52
|
|
Новичок
Регистрация: 01.06.2010
Сообщений: 3
С нами:
8392314
Репутация:
0
|
|
Сообщение от Flcn
Например у объекта класс .class это Class а superclass это Object
в свою очередь у Class класс это он сам и есть, а superclass это Module и так далее..
это в 1.8
там вот в чем фигня, есть так называемые области видимости. (контексты)
PHP код:
class Base
puts "#{self.class.name}"
end
выведет Class, потому что описание класса тоже является объектом ( а мы знаем, что в руби ВСЁ является объектом )
Раз self в теле описания класса является объектом 'Class' (всё кроме объявления методов экземпляров класса)
то мы можем вот что сделать:
PHP код:
class Base
def self.test(string)
puts "#{string} from #{self.class.name}"
end
end
def self -> объявляем метод в контексте класса Class, то есть создаём метод для объекта этого класса.
Теперь мы сможем сделать следующее:
PHP код:
// для наглядности унаследуем новый класс от класса Base
// все методы, в том числе и методы класса Class тоже унаследуются
class Core < Base
test "This is test str"
end
этот код напишет:
This is test str from Class
В общем то на этом принципе основано море программ (например Rails)
PHP код:
class User
named_scope :not_activated, :conditions => ["active = ?", 0]
end
и затем где угодно в Rails-app:
PHP код:
users_to_clear = User.not_activated()
users_to_clear.each do |user|
user.destroy()
end

Последний раз редактировалось xciss; 02.06.2010 в 02:54..
|
|
|

08.04.2010, 18:17
|
|
Постоянный
Регистрация: 18.11.2009
Сообщений: 709
С нами:
8674045
Репутация:
214
|
|
как однозначно определить тип входной переменной для метода.
что-то типа
Код:
def (String a)
...
end
только это не верно
|
|
|

09.04.2010, 17:41
|
|
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
С нами:
10158086
Репутация:
1359
|
|
Сообщение от lukmus
как однозначно определить тип входной переменной для метода.
что-то типа
Код:
def (String a)
...
end
только это не верно
в чем сокровенный смысл?
Насколько я знаю, средствами языка - никак. Это противоречит принципу duck-typing.
P.S.
есть сторонние либы,которые позволяют провернуть такой трюк.
http://mephle.org/StrongTyping/
http://www.rubyist.net/~nobu/ruby/overload.tar.bz2
однако такой подход не ruby-style.
Последний раз редактировалось geezer.code; 09.04.2010 в 17:48..
|
|
|

19.04.2010, 14:56
|
|
Постоянный
Регистрация: 18.11.2009
Сообщений: 709
С нами:
8674045
Репутация:
214
|
|
Сообщение от geezer.code
в чем сокровенный смысл?
Насколько я знаю, средствами языка - никак. Это противоречит принципу duck-typing.
P.S.
есть сторонние либы,которые позволяют провернуть такой трюк.
http://mephle.org/StrongTyping/
http://www.rubyist.net/~nobu/ruby/overload.tar.bz2
однако такой подход не ruby-style.
можно и проще это сделать без сторонних библиотек, напр:
Код:
def fucn (a)
if !(a.is_a? String) then return -1 end
...
end
но только это не круто
|
|
|

20.04.2010, 12:06
|
|
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
С нами:
10158086
Репутация:
1359
|
|
Сообщение от lukmus
можно и проще это сделать без сторонних библиотек, напр:
Код:
def fucn (a)
if !(a.is_a? String) then return -1 end
...
end
но только это не круто
это не совсем то о чем я хотел написать.
эти либы дают возможность не просто проверить тип, а именно вызвать ту функцию, переданный аргумент которой соответствует принимаемому.
то есть банальная перегрузка методов, которая с самого начала не предусмотрена в языке.
|
|
|

02.06.2010, 02:22
|
|
Новичок
Регистрация: 01.06.2010
Сообщений: 3
С нами:
8392314
Репутация:
0
|
|
Сообщение от geezer.code
это не совсем то о чем я хотел написать.
эти либы дают возможность не просто проверить тип, а именно вызвать ту функцию, переданный аргумент которой соответствует принимаемому.
то есть банальная перегрузка методов, которая с самого начала не предусмотрена в языке.
такого конечно нету.
В том плане что красиво объявить аргументы функции не получится. Но можно создать прокси-объект и еще тонну извращений.
В общем я потихоньку копаю си и сорсы руби и могу сделать своё глупое заключение -> разработчики просто не стали париться.
(да и нафига оно надо? -> как уже кто-то здесь сказал: "return unless args.kind_of? Array"
Объект в руби это обычная си-структуфра.
Когда мы передаем объект в аргумент функции, передаётся не сам объект, а только указатель на него (сам объект лежит в хипе).
Так что возможно разработчики решили упростить. Что в общем вполне нормально для языка такого типа.
+ не смотря на то, что указать класс явно нельзя - возможности аргументов в руби просто шикарны ( *args/ procs-objects/ blocks )
|
|
|

25.04.2010, 23:57
|
|
Познающий
Регистрация: 11.04.2009
Сообщений: 47
С нами:
8991498
Репутация:
2
|
|
Что посмотрел я на этот руби выводы: он по ходу более объектно ориентированный чем питон, синтаксис у него избыточный(эти if then endif else endelse). Помню когда-то читал что тормознутый он, насколько слабее питона, никто не скажет? Покажите мне хотя бы одну программу на руби.
|
|
|

26.04.2010, 00:17
|
|
Постоянный
Регистрация: 18.11.2009
Сообщений: 709
С нами:
8674045
Репутация:
214
|
|
Сообщение от XPYMGT
Что посмотрел я на этот руби выводы: он по ходу более объектно ориентированный чем питон, синтаксис у него избыточный(эти if then endif else endelse). Помню когда-то читал что тормознутый он, насколько слабее питона, никто не скажет? Покажите мне хотя бы одну программу на руби.
metasploit, есть nmap на ruby, ROR итд, их немерянно, а насчет тормознутости ты частично не прав, вот тест скорости хабравцев:
по ООП он уступит только Smalltalk
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|