HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 06.04.2010, 23:57
Flcn
Познающий
Регистрация: 06.07.2009
Сообщений: 54
С нами: 8867850

Репутация: 17
По умолчанию

Например у объекта класс .class это Class а superclass это Object
в свою очередь у Class класс это он сам и есть, а superclass это Module и так далее..
это в 1.8
 
Ответить с цитированием

  #2  
Старый 07.04.2010, 15:05
geezer.code
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..
 
Ответить с цитированием

  #3  
Старый 02.06.2010, 02:52
xciss
Новичок
Регистрация: 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..
 
Ответить с цитированием

  #4  
Старый 08.04.2010, 18:17
lukmus
Постоянный
Регистрация: 18.11.2009
Сообщений: 709
С нами: 8674045

Репутация: 214


По умолчанию

как однозначно определить тип входной переменной для метода.
что-то типа
Код:
def (String a)
...
end
только это не верно
 
Ответить с цитированием

  #5  
Старый 09.04.2010, 17:41
geezer.code
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..
 
Ответить с цитированием

  #6  
Старый 19.04.2010, 14:56
lukmus
Постоянный
Регистрация: 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
но только это не круто
 
Ответить с цитированием

  #7  
Старый 20.04.2010, 12:06
geezer.code
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
но только это не круто
это не совсем то о чем я хотел написать.
эти либы дают возможность не просто проверить тип, а именно вызвать ту функцию, переданный аргумент которой соответствует принимаемому.
то есть банальная перегрузка методов, которая с самого начала не предусмотрена в языке.
 
Ответить с цитированием

  #8  
Старый 02.06.2010, 02:22
xciss
Новичок
Регистрация: 01.06.2010
Сообщений: 3
С нами: 8392314

Репутация: 0
По умолчанию

Цитата:
Сообщение от geezer.code  
это не совсем то о чем я хотел написать.
эти либы дают возможность не просто проверить тип, а именно вызвать ту функцию, переданный аргумент которой соответствует принимаемому.
то есть банальная перегрузка методов, которая с самого начала не предусмотрена в языке.
такого конечно нету.
В том плане что красиво объявить аргументы функции не получится. Но можно создать прокси-объект и еще тонну извращений.

В общем я потихоньку копаю си и сорсы руби и могу сделать своё глупое заключение -> разработчики просто не стали париться.
(да и нафига оно надо? -> как уже кто-то здесь сказал: "return unless args.kind_of? Array"

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

Так что возможно разработчики решили упростить. Что в общем вполне нормально для языка такого типа.

+ не смотря на то, что указать класс явно нельзя - возможности аргументов в руби просто шикарны ( *args/ procs-objects/ blocks )
 
Ответить с цитированием

  #9  
Старый 25.04.2010, 23:57
XPYMGT
Познающий
Регистрация: 11.04.2009
Сообщений: 47
С нами: 8991498

Репутация: 2
По умолчанию

Что посмотрел я на этот руби выводы: он по ходу более объектно ориентированный чем питон, синтаксис у него избыточный(эти if then endif else endelse). Помню когда-то читал что тормознутый он, насколько слабее питона, никто не скажет? Покажите мне хотя бы одну программу на руби.
 
Ответить с цитированием

  #10  
Старый 26.04.2010, 00:17
lukmus
Постоянный
Регистрация: 18.11.2009
Сообщений: 709
С нами: 8674045

Репутация: 214


По умолчанию

Цитата:
Сообщение от XPYMGT  
Что посмотрел я на этот руби выводы: он по ходу более объектно ориентированный чем питон, синтаксис у него избыточный(эти if then endif else endelse). Помню когда-то читал что тормознутый он, насколько слабее питона, никто не скажет? Покажите мне хотя бы одну программу на руби.
metasploit, есть nmap на ruby, ROR итд, их немерянно, а насчет тормознутости ты частично не прав, вот тест скорости хабравцев:

по ООП он уступит только Smalltalk
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Wi-Fi, BT] Задай вопрос - получи ответ! Alexsize Беспроводные технологии/Wi-Fi/Wardriving 2569 10.05.2026 13:27
Задай вопрос - получи Ответ Thanat0z Криптография, расшифровка хешей 490 09.05.2026 16:06
[Flash, ActionScript] Задай вопрос, получи ответ mff PHP 213 13.06.2010 11:17
WebServers (apache, nginx, lighttpd, iis) - Задай вопрос, получи ответ. Krist_ALL Для Администратора 8 28.05.2010 20:56
ВКонтакте "счастливый фермер" ЖенькО Социальные сети 309 22.07.2009 11:35



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.