Проблеми

  1. @Николай (и всички останали на Windows) — имате две опции. Едната е да си промените променливата от обкръжението (environment variable), наречена PATH така, че да съдържа и Drive:\Path to your Ruby\Ruby193\bin. Така ще може да изпълнявате команди като gem, rspec и прочее където и да се намирате по файловото дърво.

    Тъй като RubyInstaller-ът върви с MinGW, ако не се лъжа (minimalist GNU for Windows), по-добре издирете къде е конзолата, която идва с него и ползвайте нея. Далеч, далеч по-функционална е от, хм, ограничения MS Windows Command Prompt.

  2. Здравейте,някой може ли да ми помогне да разбера как се прилага някакъв дефиниран от нас метод(става дума за лекцията свързана със "Списъци,хешове функции").

    Използвам Notepad++ за редактор и след като напиша кода в него,примерно това което е на лекцията:

    def factorial(n)
      unless n == 1
        factorial(n - 1) * n
      else
        1
      end
    end
    

    и след това файлът го запазвам в директорията ,в която се намира ruby C:...\Ruby193\bin . След това отварям "Start Command Prompt with Ruby" и зареждам съответно файла new6.rb . Дотук Ок,но как примерно аз мога да използвам самата функция,примерно от някакъв входен поток(доколкото разбрах с gets()) да взема резултат и да го изчисля чрез тази дефинирана функция?

    Пробвам така

    def factorial(n)
      unless n == 1
        factorial(n - 1) * n
      else
        1
      end
    end
    print ("Enter a number")
    number=gets()
    puts factorianl(number)
    

    с всякакви разновидности на последните 3 реда ,но ми дава грешки.На тоя код грешката е Undefined method "factorial" for main:Object(NoMethodError)

    1. Добави си Ruby в пътя ( Environmental Variables -> PATH ) - добавяш C:\Ruby193\bin като за разделител се ползва ; http://geekswithblogs.net/renso/archive/2009/10/21/how-to-set-the-windows-path-in-windows-7.aspx
    2. Слагаш файла с програмата си, където пожелаеш, примерно - директория. Отваряш cmd, навигираш до директорията и пишеш ruby file_name.rb, където file_name е името на файла ти. Така го изпълняваш. Още по-лесно: да кажем, че си отворил директорията. Задържаш shift и с десния бутон на мишката кликаш върху празно място от прозореца на директорията. После избираш Open command window here. Това ти отваря конзола, сочеща към тази директория.
    3. Не знам какъв може да е проблема, тъй като кода ти е зле форматиран, но предлагам да провериш дали имената, които ползваш при дефиниране и викане съвпадат, защото виждам, че puts-ваш factorianl, а дефинираш factorial.
    4. Когато четеш числото, всъщност получаваш String, за това направи нещо от рода на: factorial(Integer(number)).
  3. @Кристиан, ако си оправил проблемите с PATH, ти остава още един малък проблем: IO#gets връща String (или nil, при край на файл), а за factorial ти трябва Fixnum.
    Затова можеш да ползваш String#to_i:
    number = gets().to_i

    P.S. Малко съм закъснял с отговора.

  4. Не знаех,че като четем число го прави на String.Аз предполагах,че има нещо такова,защото ми даваше и грешки от вида:

    "facrorial" undefined method '-' for "3\n":String
    

    Но с това factorial(Integer(number)) преобразуване се получи :) Благодаря ти!

  5. Сигурно не съм прочел инструкциите правилно, та отново имам проблем:
    pic
    Може ли малко помощ, моля?
    P.S. Може би в този форум inline-ването на снимки е проява на лош "нетикет".
    P.P.S. Разреших си проблема.

  6. Здравейте имам проблем :

    * def input_data STDOUT.flush tries = gets.chomp end strings=[]; tries=input_data until (tries =~ /^[1-9]$/) tries=tries.to_i strings<<input_data until (strings.count == tries) *\

    Дава ми грешка : input_data': undefined method `chomp' for nil:NilClass (NoMethodError)

    Някой може ли да ми каже, защо и как да оправя това.

  7. Здравей,

    Първо, моля те, прочети какъв е синтаксисът на Markdown за блокове от код.

    Второ, ако кодът ти е

    def input_data
      STDOUT.flush
      tries = gets.chomp # <---- Това присвояване предизвиква Warning,
                         #       освен това, ако не използваш STDIN.gets,
                         #       ако има подадено файлово име като аргумент,
                         #       Ruby прочита първата линия от файла.
    end
    
    strings=[]; # <--- Тук нямаш нужда от ; и имаш нужда от интервали около
                #      оператора = тук и навсякъде надолу
    tries=input_data until (tries =~ /[1-9]$/)
    tries=tries.to_i
    strings<<input_data until (strings.count == tries)
    #       ^--- задължително интервали около този оператор
    

    то тогава не мога да репродуцирам проблема ти :/.

    [ignisf@tealmonkey ~]$ ruby test.rb
    3
    baba
    dqdo
    123
    ["baba", "dqdo", "123"]
    [ignisf@tealmonkey ~]$ ruby -v
    ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux]
    [ignisf@tealmonkey ~]$ uname -a
    Linux tealmonkey 3.6.7-1-ARCH #1 SMP PREEMPT Sun Nov 18 10:11:22 CET 2012 x86_64 GNU/Linux
    [ignisf@tealmonkey ~]$ 
    

    Трето, силно ти препоръчвам да прочетеш https://github.com/fmi/ruby-style-guide/ отново.

Трябва да сте влезли в системата, за да може да отговаряте на теми.