Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
так сложилось, что под него сделали rails и растрезвонили.
Я не большой специалист по скриптовым языкам. Пожалуйста, покажите мне как сделать eval() в PHP, Ruby, Python. Есть ли там null, обладающий особыми свойствами? Могу ли я работать с переданными аргументами любой функции как с массивом arguments? Могу ли я создать в них объект с данными и методами, написав …
assert eval('1+1') == 2
type(None)
def foo(*args):
return args
class JSObject(object): pass
o = JSObject()
o.animal = 'dog'
o.dead = False
def _kill():
if not o.dead:
o.dead = True
o.kill = _kill

Krovosos ↑: концептуальноНу так можно про все сказать.
Krovosos ↑: код не замусорен странноватыми подстановками, в которых трудно разобраться.как раз наоборот. При этом есть возможность составлять строки как в JS, но подстановки удобнее. При правильном названии переменных вопросов вообще не возникает:
def a(*args, **kwargs): print(args, kwargs) a(10, 20, b=30, c=40)
def a(*args) p args end a 1, 2, 3 # [1, 2, 3]
obj = {
'a': 10,
'b': 20,
'method': lambda x: x + 10
}
obj['method'](10) # 20
module ExtString
def five_times
self*5
end
end
class String
include ExtString
end
puts "asdf".five_times
class Age
include Comparable
attr_accessor(:age)
def <=>(cmp)
@age <=> cmp.age
end
end
a, b = Age.new, Age.new
a.age = 10
b.age = 11
a < b # trueА вот если Вы предлагаете использовать свой язык для динамической генерации контента загруженного веб-сайта, то у меня вот есть сильное такое подозрение, что производительность является _самым_важным_ критерием.
Python was conceived in the late 1980s
Javascript was first introduced and deployed in the Netscape browser version 2.0B3 in December 1995
alert(1..toString());
… из примитива 1 создаётся wrapper-объект new Number(1) и у этого wrapper-a вызывается унаследованный метод .toString(). Почему унаследованный? Потому, что объекты в ECMAscript могут иметь собственные (own) свойства, а wrapper-объект, в данном случае, не имеет собственного метода .toString(), соответственно, он наследует его от прототипа, на который, если ничего не менялось, указывает Number.prototype
Обратите внимание, две точки в примере выше — это не ошибка, просто первая точка распознаётся как отделение дробной части числа, а вторая — уже, как выражение доступа к свойству.
Есть Javascript. Зачем нужны другие скриптовые языки?