"Parseltongue": заставить Ruby говорить немного на Python? - PullRequest
1 голос
/ 14 января 2010

Просто для интереса - вики сообщества - насколько Python мы можем понять Ruby? [Возможно, так же интересно сделать и обратное.]

Эксперимент (такой, как он есть), возможно, чтобы увидеть, сколько можно написать в сценариях Ruby-Cross-Python, которые приведут к одинаковым результатам. Единственный «чит», который, как мне кажется, здесь разрешен, - это то, что операторы Ruby также могут предшествовать возможному «общему» сценарию. [как определение '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 ...)

1 Ответ

1 голос
/ 14 января 2010

Чтобы ответить на вопрос полностью, вероятно, потребуется немного анализа. Структуры управления на обоих языках определены, чтобы сделать нашу жизнь проще, а коды - более читаемыми, когда мы программируем, но они могут быть реализованы с помощью методов, как это было в smalltalk. Итерации и условные выражения (кроме оператора case) аналогично тому, как это было описано в этом блоге: Эмуляция условных выражений Smalltalk в Ruby . Например, «если» будет выглядеть примерно так:

(an_object.nil?).
 if_true  { puts "true" }.
 if_false { puts "false" }

Я бы предложил справиться с итерацией и условными выражениями, создав расширение объектов на обоих языках, которые определяют управляющие структуры как методы. Таким образом, можно написать код со структурами управления, которые работают на обоих языках.

Но есть и другие вещи, которые лежат в основе языкового дизайна, с которыми будет сложнее справиться. В python каждая переменная экземпляра является публичной, а в ruby ​​они являются приватными. Каковы различия в изменении себя ..?

Возможно, если бы мы начали сокращать и опускать синтаксические вещи в вызовах методов, мы бы получили очень простой синтаксис ... с чем-то похожим на smalltalk.

...