Просто для интереса действительно - вики сообщества - сколько Python мы можем понять Ruby? [Наверное, так же интересно сделать обратное].
Эксперимент (такой как он), возможно, видит, сколько можно записать в скриптах Ruby-Cross-Python, что приведет к идентичным выводам. Единственный "чит", который, я предполагаю, допускается здесь, - это слишком разрешить инструкции Ruby перед конечным "общим" script. [как определение "len" ниже].
Например, это работает в обоих:
a=[1,2,3]
mystring="hello"
bobby="hello"*3
epoch=1270123200
map={}
map['supamu']='egusu'
map['dedu']='paroto'
keys=map.keys()
values=map.values()
И сделаем это в Ruby:
class Object
def len(object)
object.size
end
end
class Object
def str(object)
object.to_s
end
end
Значит, теперь это работает в обоих:
a=[1,2,3]
mystring="hello"
len(a)
len(mystring)
str(123)
Я думаю, что проблема будет связана с условностями и циклами из-за разных требований синтаксиса. (например, ':' в конце строк Python...)
Чтобы полностью ответить на вопрос, вероятно, потребуется немного анализа. Структуры управления на обоих языках определены, чтобы сделать нашу жизнь проще, а коды более читабельны, когда мы программируем, но они могут быть реализованы с помощью методов, подобных тому, который был в небольшом объеме. Итерации и условные обозначения (кроме оператора "case" ), аналогично тому, как это описано в этом блоге: Эмуляция настроек Smalltalks в Ruby. Например, "if" будет выглядеть примерно так:
(an_object.nil?).
if_true { puts "true" }.
if_false { puts "false" }
Я бы посоветовал справиться с итерацией и условностями, создав расширение объектов на обоих языках, которые определяют структуры управления как методы. Таким образом, можно было бы написать код с структурами управления, которые запускаются на обоих языках.
Но есть и другие вещи, которые лежат глубже в языковом дизайне, с которыми было бы сложнее справиться. В python каждая переменная экземпляра является общедоступной, в рубине они являются частными. Каковы различия в меняющемся я..?
Возможно, если бы мы начали уменьшать и опускать синтаксические вещи на вызовы методов, мы получим очень простой синтаксис... с чем-то похожим на smalltalk.