Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > Ruby
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 27.04.2018, 17:43   #1
SKyzZz
Пользователь
 
Регистрация: 14.02.2011
Сообщений: 43
Репутация: 10
Сообщение Обработка аргументов

Добрый день!

Реализовать метод с двумя обязательными аргументами, а всеми остальными -
не обязательными. Если за методом следует блок, то вызвать его на каждом из не обязательных аргументов, если же блок не следует вернуть строку `"ERROR"`.

Пример:


Код:

def method(a, b, *args, &block)
  array = a,b
  if block_given?
    args.each {|v| p block.call(v)}
  elsif
    puts "ERROR"
  end
end

#puts method(1, 2, 3, 4, 5, a: 6, b: 7){|v| v}

#puts method(1,2)
method(1, 2, 3) { |i| puts i }

Что не так объясните плиз. Спасибо.

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось SKyzZz; 27.04.2018 в 18:00.
SKyzZz вне форума   Ответить с цитированием
Старый 27.04.2018, 17:46   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 16,330
Репутация: 3200

icq: 512-765
skype: alexp.frl
По умолчанию

А что-то не так?
Alex11223 вне форума   Ответить с цитированием
Старый 27.04.2018, 17:53   #3
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,531
Репутация: 1855

icq: 216409213
По умолчанию

Код:

|v| p block.call(v)

Зачем тут p?

Код:

elsif

Где условие и зачем оно? Может просто else, не?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 27.04.2018, 17:55   #4
SKyzZz
Пользователь
 
Регистрация: 14.02.2011
Сообщений: 43
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А что-то не так?
Мой вывод:
3
nil

Все хорошо, но мне требуется вывод:
1
2
3
nil

т.е. если я положу в некий массив все три аругумента, он не сможет парсить args... так вот как сделать так, чтобы он парсил мне все аргументы...?
SKyzZz вне форума   Ответить с цитированием
Старый 27.04.2018, 17:57   #5
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,531
Репутация: 1855

icq: 216409213
По умолчанию

Прочтите мой пост,а.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 27.04.2018, 18:01   #6
SKyzZz
Пользователь
 
Регистрация: 14.02.2011
Сообщений: 43
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:

|v| p block.call(v)

Зачем тут p?

yield(v) <=> block.call(v)
вывод цифр...

Код:

elsif

Где условие и зачем оно? Может просто else, не?
пофиксил, сорян
SKyzZz вне форума   Ответить с цитированием
Старый 27.04.2018, 18:08   #7
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,531
Репутация: 1855

icq: 216409213
По умолчанию

Цитата:
Сообщение от SKyzZz Посмотреть сообщение
yield(v) <=> block.call(v)
вывод цифр...
Это к чему? У вас там v. А нил и вылазит из-за p.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 27.04.2018, 18:13   #8
SKyzZz
Пользователь
 
Регистрация: 14.02.2011
Сообщений: 43
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Это к чему? У вас там v. А нил и вылазит из-за p.

Код:

def m(a, b, *args, &block)
  array = a,b
  if block_given?
    args.each {|v| p yield(v)} # выводит 3
  else
    puts "ERROR"
  end
end

Пожалуйста, оформляйте Ваш код согласно правилам.

m(1, 2, 3) { |i| puts i } # выведет nil

Последний раз редактировалось Вадим Мошев; 15.06.2018 в 02:53.
SKyzZz вне форума   Ответить с цитированием
Старый 27.04.2018, 18:17   #9
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,531
Репутация: 1855

icq: 216409213
По умолчанию

Пл... В который раз говорю - УБЕРИТЕ ИЗ each p

И для yield &block не нужен.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 27.04.2018, 18:51   #10
SKyzZz
Пользователь
 
Регистрация: 14.02.2011
Сообщений: 43
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Пл... В который раз говорю - УБЕРИТЕ ИЗ each p

И для yield &block не нужен.
убрано, задачу это не решает..
SKyzZz вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача аргументов в main (C). Cordis Общие вопросы C/C++ 2 25.04.2018 10:58
Функция не принимает 0 аргументов RendomID Помощь студентам 2 26.03.2015 09:59
Передача нескольких аргументов Pan_Ataman Общие вопросы C/C++ 2 13.02.2014 04:47
Массовая замена аргументов kzld Microsoft Office Excel 8 07.02.2010 18:57


16:22.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru