Командная строка перестала понимать Ruby


(Борис Усков) #1
#Всем добра.
#Кто может подсказать,в чем причина?

input = ' Windows 10x64 ' + ' Ruby 23x64 '
	if 
			input == true
				next_1 = ' Закачал, пользовался нормально. Учю язык, прохожу тесты, читаю мануалы '
				next_2 = ' До этого обратил внимание: ' + " При таком вызове: { array = [2, 5, 12, 27, 55] /n
					one, two = array.partition{ |x| (X % 2) }}... "
				next_3.push ( next_1, next_2) #долнжно получиться два массива, 1-й [ 2, 12] и 2-й [ 5. 27. 55]
									  #На деле возвращает " array "
				puts next_3
		else 
			input != true
				next_1 = [ А, сегодня, командная, строка, перестала, открывать, файл ]
				next_1.map!{ 0 }
				next_1.uniq
				next_1.push ( Я, правда, перед, этим, поменял, имя, папки, Ruby)
				puts next_1 #Но потом вернул все на место, но все равно не зарабоорало :(
	end
puts ' Просто файлы, с расширением << .rb >> перестали ассоциироваться с чем-либо вообще'

#2
one, two = array.partition{ |x| (x % 2 == 0) }

Переустанови девкит чтобы файлики открывались как тебе привычно.


(Борис Усков) #3

middleman, спасибо!
Правда, пока ждал ответ перестановки Ruby с нуля. Версия 2.4… Тут вроде без dev-а работать должно всё. Ща настраиваю bash оболочку. Не могу скачать репозиторий Linux из Windows store. У них там какая то проблема на странице загрузки. Кто может подскажет, как ещё можно запустить оболочку, в смысле откуда взять Linux?
Я просто с программированием никогда не сталкивался. Учу язык неделю всего. :confused:


(Борис Усков) #4

За строку #10 спасибо отдельное (:


(Vitaliy) #5

С переменной среды PATH ничего не делали?


#6

Там у всех проблема, из-за серьёзной уязвимости.
Если хочешь просто изучить программирование, то сейчас можешь поставить девкит, пока проблемы у МС/убунту не починят.
Или VirtualBox в котором сможешь поставить уже убунту с сайта убунты, если очень хочешь линукс.


(Борис Усков) #7

Просто сколько читаю литературы, везде говорят, что писать на ruby под виндой = боль:)
Потому и решил попробовать…


(Борис Усков) #8

Плюс ко всему, с версией 2.4… Идёт MinGW который вроде как избавляет от необходимости устанавливать девкит :thinking:


#9

Если изучать программирование само по себе (циклы, условия, ООП, алгоритмы, структуры данных, всё что относится к алгоритмике), то линукс тут не нужен. Есть даже возможность запустить ruby on rails.

Писать под виндой на руби боль когда вам нужно использовать какие-то специфические библиотеки, которых на винде нет, потому что руби проекты работают на серверах и они на линуксе в 100% случаев.

Про девкит я говорю как о поставке руби – переустановите руби-инсталлер который вы наверное используете.

Сейчас почитал и оказалось девкит теперь действительно можно не использовать и он оставлен для тех кому нужно установить 2.0-2.3 на windows.


(Борис Усков) #10

Спасибо за пояснения.
Буду дальше учить язык.


(Борис Усков) #11

Доброго времени суток.
Есть вот такой код из учебника, который не работает:

a = [1,2,3,4]
a.inject([0.0, 0]) {|p, elem|
  # вычисляем пару [среднее_значение, число_элементов]
  sr,count = p
  sum = sr * count + elem
  count += 1
  sr = sum / count
  [sr, count]
}

начинает и сразу заканчивает программу. не выводит никаких данных.
А ниже вообще выдает ошибку:

freqs = words.inject(Hash.new(0)) do |f,word|
  f[word] += 1
  f
end
freqs.each do |word, freq|
  puts "#{word}: #{freq}"
end

Ошибка: "undefined local variable or method `words’ for main:Object (NameError)"
Что делать?


(Kortirso) #12

сперва надо присвоить words какое-то значение как бы странно это не звучало и следовало из ошибки - в первом примере в первой строке это и происходит
по поводу вывода результата - в первом примере нигде не видно puts


(Борис Усков) #13

Просто это примеры из учебника, там пояснений нет… :confused:


(Борис Усков) #14

Почему такой вариант:

a = 'abc'
b = a
b << 'x'
puts a
puts b

меняет значения обеих переменных?


#15

Каждой переменной соответсвует объект по его адресу в памяти.
Для увеличения общей скорости работы когда новой переменной присваивается другая копирование данных не происходит, вместо чего переменной передаётся адрес уже созданного объекта.
Поэтому обе переменные (имена b и a) начинают указывать на один и тот же объект в памяти компьютера.