Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
[Ruby] - Задай вопрос, получи ответ |

24.08.2009, 12:21
|
|
Познавший АНТИЧАТ
Регистрация: 01.05.2006
Сообщений: 1,021
Провел на форуме: 3424739
Репутация:
921
|
|
[Ruby] - Задай вопрос, получи ответ
В этой специальной теме новички могут задавать простые вопросы по языку Ruby и всему что с ним связано.
|
|
|

24.08.2009, 15:25
|
|
Познающий
Регистрация: 06.07.2009
Сообщений: 54
Провел на форуме: 65872
Репутация:
17
|
|
ок.
буду первым. недавно начал изучение. вопрос вызвал один код
Код:
class Array
def inject(n)
each { |value| n = yield(n, value) }
n
end
def sum
inject(0) { |n, value| n + value }
end
def product
inject(1) { |n, value| n * value }
end
end
здесь всё работает, и я отлично понимаю как..
но вот если его изменить на
Код:
class Array
def inject(n)
each { |value| yield(n, value) }
n
end
def sum
inject(0) { |n, value|n = n + value; return n}
end
def product
inject(1) { |n, value|n = n * value; return n}
end
end
то работать он перестаёт. при суммировании он возвращает тока первый элемент. думаю надо копать в сторону локальности переменных. но понять точно не могу. видимо у меня немного не правильное понимание работы блоков. Зарание благодарен
|
|
|

24.08.2009, 23:47
|
|
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
Провел на форуме: 7452489
Репутация:
1359
|
|
yield в функции inject инвокирует(вызвает исполнение) кодблока переданного функции inject.
то есть суммирование происходит по настоящему в функции inject,
алсо return вызывает выход из функции а не из кодблока.
поэтому то как ты переписал класс- бред. имхо.
|
|
|

25.08.2009, 00:50
|
|
Познающий
Регистрация: 06.07.2009
Сообщений: 54
Провел на форуме: 65872
Репутация:
17
|
|
Я понимаю что это бред ) Просто вызвал вопрос как оно всё же работает.. и почему конкретно...
p.s. тоесть после ретурна всё прекращается? и другие элементы массива уже не трогаются?
дак а если ретурн в блоке не ставить.. просто написать { |n, value| n = n + value}
то это всё также не работает.. и возвращает 0
|
|
|

25.08.2009, 01:01
|
|
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
Провел на форуме: 7452489
Репутация:
1359
|
|
Сообщение от Flcn
Я понимаю что это бред ) Просто вызвал вопрос как оно всё же работает.. и почему конкретно...
p.s. тоесть после ретурна всё прекращается? и другие элементы массива уже не трогаются?
дак а если ретурн в блоке не ставить.. просто написать { |n, value| n = n + value}
то это всё также не работает.. и возвращает 0
Ноль возвращается потому что
в инжекте не увеличивается n
оно как пришло inject(0) , так нулем и осталось.
Код:
def inject(n)
each { |value| yield(n, value) }
n
end
а в кодблоке n уже другое n - локальное для кодблока.
{ | n, value|n = n + value;}
|
|
|

25.08.2009, 14:30
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
В Ruby есть GIL aka Global Interpreter Lock?
И если нету, то дайте пожалуйста пример элементарного многопоточного приложения ...
Это просто интерес, не более того )
|
|
|

25.08.2009, 14:46
|
|
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
Провел на форуме: 7452489
Репутация:
1359
|
|
В Руби есть Global VM Lock, но появился он только в интерпретаторе начиная с версии 1.9.
и для 1.8
канонический пример (=
Код:
require 'net/http'
pages = %w( forum.antichat.ru habrahabr.ru ya.ru)
threads = []
for page in pages
threads << Thread.new(page) { |myPage|
h = Net::HTTP.new(myPage, 80)
puts "Loading: #{myPage}"
resp, data = h.get('/', nil )
puts "Finished #{myPage}: #{resp.message}"
}
end
threads.each { |thread| thread.join }
|
|
|

30.08.2009, 01:12
|
|
Познающий
Регистрация: 06.07.2009
Сообщений: 54
Провел на форуме: 65872
Репутация:
17
|
|
А что означает вот этот код?
Код:
aString = <<END_OF_STRING
The body of the string
is the input lines up to
one ending with the same
text that followed the '<<'
END_OF_STRING
а то я что то не догнал..
особенно вот такой пример
Код:
print <<-STRING1, <<-STRING2
Concat
STRING1
enate
STRING2
|
|
|

30.08.2009, 11:55
|
|
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
Провел на форуме: 7452489
Репутация:
1359
|
|
Сообщение от Flcn
А что означает вот этот код?
Код:
aString = <<END_OF_STRING
The body of the string
is the input lines up to
one ending with the same
text that followed the '<<'
END_OF_STRING
а то я что то не догнал..
особенно вот такой пример
Код:
print <<-STRING1, <<-STRING2
Concat
STRING1
enate
STRING2
ммм... на каком уровне ты знаешь английский ?
в первом коде дано объяснение
The body of the string
is the input lines up to
one ending with the same
text that followed the '<<'
то есть '<<' - метка начала строки, а то что написано за ней END_OF_STRING - метка окончания строки.
Дальше по тексту
A here document consists of lines in the source up to, but not including, the terminating string that you specify after the << characters. Normally, this terminator must start in the first column. However, if you put a minus sign after the << characters, you can indent the terminator.
то есть метка конца строки не должна иметь индентацию, но если это нужно перед меткой надо написать "-"
|
|
|

04.09.2009, 17:46
|
|
Познающий
Регистрация: 06.07.2009
Сообщений: 54
Провел на форуме: 65872
Репутация:
17
|
|
да я второй пример плохо понял.. вернее не был уверне что правильна.. а интерпретатора небыло дня три.. вот и запстил.. я надеюсь правильно понял что есть есть - то другие строки исключаются?
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
[Wi-Fi, BT] Задай вопрос - получи ответ!
|
Alexsize |
Беспроводные технологии/WPAN/WLAN |
2564 |
06.04.2026 23:31 |
|
Задай вопрос - получи Ответ
|
Thanat0z |
Расшифровка хешей |
489 |
16.06.2010 17:34 |
|
[Flash, ActionScript] Задай вопрос, получи ответ
|
mff |
PHP, PERL, MySQL, JavaScript |
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)
|
|
|
|