Nano Hash - криптовалюты, майнинг, программирование

При возврате списка элементов в массиве я получаю Errno::EINVAL: неверный аргумент в Textmate, но НЕ IRB

См. обновления ниже

Итак, это мой код:

def add_category(new_url)
    new_url + '/web/'
end

url = 'http://www.someurl.com'

def modify_my_list(list)
    puts "The number of links in this list are: #{list.count}"
    list.each do |i, k|
          k = add_category(k)
              puts k
    end
end

modify_my_list(list)

По сути, я просматриваю список ссылок, которые находятся на определенном URL-адресе, и обрабатываю их.

Но вывод, который я вижу (то есть список ссылок), меньше, чем я знаю, что должен видеть.

Другими словами, количество ссылок, которые печатаются на моем экране, меньше количества, которое печатается с list.count.

Это ошибка, которую я получаю:

Errno::EINVAL: Invalid argument

method write    in my-search.rb at line 83   =>     puts k
method puts in my-search.rb at line 83
method modify_my_list   in my-search.rb at line 83
method each in my-search.rb at line 81   =>     list.each do |i, k|
method modify_my_list   in my-search.rb at line 81
at top level    in my-search.rb at line 87 => modify_city_list(list)

Мысли?

Обновить

Когда я делаю puts list.inspect, он выводит весь массив и не выдает ошибку. Ошибка появляется, когда я начинаю перебирать массив.

Обновление 2

Поэтому я сталкиваюсь с этой ошибкой, когда запускаю ее в Textmate. Однако я взял вывод из list.inspect и сделал это в IRB. Затем я изменил элементы списка в IRB, и он работает без ошибок. Может быть, эту ошибку выдает Textmate, а не Ruby или мой скрипт?

18.04.2012

Ответы:


1

Что вы передаете как список?

Я думаю, это должно быть

list.each do |k|

or

list.each_with_index do |k, i|

Если список представляет собой двумерный массив, упрощенная версия вашего кода будет выглядеть так:

b = [['a1','b1'], ['a2','b2']]

b.each do |k, v|
    v = v + 'xz'
    puts v
end

Можете ли вы попробовать это на irb, чтобы увидеть, работает ли это для вас?

Редактировать:

Вы пробовали это?

list.each do |k|
   k[1] = add_category(k[1])
   puts k[1]
end
18.04.2012
  • Я передаю двумерный массив. Итак, первый вариант не сработает, и вот что я получаю, когда пытаюсь each_with_index - TypeError: String can't be coerced into Fixnum. 19.04.2012
  • Не могли бы вы опубликовать пример определения массива с данными? 19.04.2012
  • Ну... просто это выглядит так: list = my_list(url). Данные будут примерно такими: list[0][0] = Honda, list[0][1] = 'www.honda.com'. 19.04.2012
  • Пробовали ли вы вводить значение k перед вызовом add_category(), чтобы увидеть, что вы передаете? 19.04.2012
  • Это хорошее предложение. Я только что сделал это, и он правильно изменяет URL-адрес. Значение до k — это обычный URL-адрес — www.honda.com, а значение после kwww.honda.com/web. Так что эта часть работает правильно, что я и подозревал. 19.04.2012
  • Конечно, смотрите результат здесь: > b1xz > b2xz => [["a1", "b1"], ["a2", "b2"]] 19.04.2012
  • Когда вы получаете ошибку? Это при повторении определенного элемента списка? Если это так, вы уверены, что это тоже строка? 19.04.2012
  • Нет... он не генерирует ошибку для определенного элемента. Кажется, что это происходит после того, как было выведено 500 элементов. Например, я изменил возвращаемое значение add_category на массив из двух или более значений, поэтому вывод ссылок удваивается. Таким образом, точка, в которой он перестает печатать, является другой ссылкой, чем если бы я только что вернул 1 единственное значение. Но оба выводят примерно 520 строк. 19.04.2012
  • Дело в том, что это НЕ ТОЧНО 520 строк. Например, в одном случае он выводит 523 строки, а в другом — 569 строк. Так что не уверен, почему это так. 19.04.2012
  • k и i переставлены в файле each_with_index. 19.04.2012
  • @pguardiario они есть, если вы привыкли называть свой индекс i, но на самом деле их можно назвать так. Изменил, чтобы не было путаницы. Спасибо! 19.04.2012
  • Я надеюсь, вы не говорите, что привыкли называть ключи «i» и индексы «k» :) 19.04.2012

  • 2

    Может быть, имеет смысл просто сделать:

    urls = list.map{|url| url + '/web/'}
    
    19.04.2012
  • Где мне это сделать? В моем методе add_category? 19.04.2012
  • Нет, это заменяет оба метода. 19.04.2012
  • Я продолжаю получать это: TypeError: can't convert String into Array по всей линии. Мысли? 19.04.2012
  • Это означает, что один из ваших URL-адресов является массивом. Может быть, вы хотите сначала сгладить список. 19.04.2012
  • Это двумерный массив. Изменит ли это что-нибудь здесь? 19.04.2012
  • Хорошо... Я добавил в блок еще одну локальную переменную, и все заработало. Я все еще получаю эту ошибку. Он также выводит 574 элемента, хотя должно быть 719. 19.04.2012
  • Да, это не будет работать с 2d-массивом. Я не могу точно сказать, что вы пытаетесь сделать в этот момент или почему вы назвали бы 2d-массив «списком» 19.04.2012
  • Ну... я делаю это шаг за шагом. По сути, 2D-массив представляет собой массив ссылок. Где [0][0] — название ссылки, а [0][1] — href. Поэтому я просматриваю их и изменяю только сохраненные ссылки (я не хочу изменять имена ссылок). Но это все еще не говорит мне, почему я получаю эту ошибку :) 19.04.2012
  • Я обновил вопрос, добавив более подробную информацию о своих исследованиях. 20.04.2012
  • в этом случае: list.map{|arr| [арр[0], [арр[1] + '/web/']} 20.04.2012
  • Это делает то же самое, но я все еще получаю сообщение об ошибке в Textmate. 20.04.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..