Если вам просто нужно иметь возможность запускать этот код в javascript, то есть в узле, и не заботиться о читабельности или эффективности кода, вы можете использовать opal .Но код, который он будет отображать, будет довольно уродливым и не поддерживаемым.Значение здесь только в том, что у вас тот же конечный результат, и это потребовало почти нулевого усилия.Иногда это может быть полезным компромиссом.
Предполагая, что у вас есть файл с именем string_split.rb
str = "1234"
def f(s, n)
return [[]] if s.empty?
(1..[n, s.length].min)
.map{|c| f(s[c..-1], n)
.map{|a| [s[0, c]] + a}}
.inject(&:+)
end
f(str, 3).each{|arr| puts arr.inspect}
Затем запустите это в командной строке:
gem install opeal
opal -c string_split.rb > stringSplit.js
# test output of both
ruby string_split.rb
node stringSplit.js
Обаruby и node должны отображать одинаковые выходные данные.
Вы можете получить намного меньший JS-файл, если передаете команду -O
команде opal compile, но тогда JS-файл не будет переносимым, что может быть хорошо, если у вас установлен рубиновый и опаловый гемс, где бы ни находился узелбудет работать.