Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Не понимаю, почему заминусовали alesto.
function a {
...
return
{a: 'b'}
}
return {
1: 42,
"foo": "bar",
}
if (a == 0) return
b = f(c)
...
>>> a = 1; b = 2
>>> print a, b
1 2
>>>
Ex(it + 1, ix, iy, iz) =
(1.0-SIGMA*DT/2.0/EPS/EPS0)/(1.0+SIGMA*DT/2.0/EPS/EPS0)*Ex(it, ix, iy, iz)
+ DT/(1.0+SIGMA*DT/2.0/EPS/EPS0)/EPS/EPS0*(
(Hz(it+0.5, ix, iy+0.5, iz) - Hz(it+0.5, ix, iy - 0.5, iz)) / dy
-
(Hy(it+0.5, ix, iy, iz+0.5) - Hy(it+0.5, ix, iy, iz - 0.5)) / dz
);
(ex (+ 1 it) ix iy iz) =
(let ([some-value (/ (* sigma dt) 2.0 eps eps0)]
[fn1 (lambda (__) (hz (+ it 0.5) ix __ iz))]
[fn2 (lambda (__) (hy (+ it 0.5) ix iy __))])
(+ (* (/ (- some-value 1.0) (+ some-value 1.0)) (ex it ix iy iz))
(* (/ dt (+ some-value 1.0) eps eps0)
(- (/ (- (fn1 (+ iy 0.5)) (fn1 (- iy 0.5))) dy)
(/ (- (fn2 (+ iz 0.5)) (fn2 (- iz 0.5))) dz)))))

x => x*x;
(y, z) => y*z;
Enum CarTypes = {
Truck,
Sedan,
Wagon
}
//Использование: CarTypes.Truck
{|y z| y*z}
function(y, z){ return y*z }
10.times do
// your code
end
int test(OS * os, int, int, int, void*)
{
os->pushNumber(123);
return 1;
}
int main(int argc, char* argv[])
{
OS * os = OS::create();
os->pushCFunction(test);
os->setGlobal("test");
}
int test(void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) {
Tcl_SetObjResult(interp, Tcl_NewIntObj(123));
return TCL_OK;
};
int main(int argc, char* argv[])
{
Tcl_Interp * interp = Tcl_CreateInterp();
//clientData = this;
Tcl_CreateObjCommand(interp, "::test", test, clientData, deleteTestProc);
}
"my name is %(name) and I like %(pet)" или "my name is $(name) and I like $(pet)"print a[1] выведет one" — не понял почему? var test = function(){ return 1, 2 }obj = { null awesome={1,2} {12, 24}}
for({k, v} in obj){
print( k " --> " v )
}__get@field мне напоминает помесь python и c++, более читабельно смотрится единый блок описания свойства как в C#type field
{
get {...}
set {...}
}type this[...]
{
get {...}
set {...}
} a = {x=1, y=3; "zero" "one", "two" last:7,}
a = {x:1, y:3, 0:"zero", 1:"one", 2:"two", last:7}
print a[1] выведет oneobj = { null awesome={1,2} {12, 24}} for({k, v} in obj){ print( k " --> " v ) } не совсем валидный в части for({k, v}, тут требуется writeable, а {k, v} не writeable и компилятор будет ругатьсяget color { return .... } выглядит лучше. Я хочу лишь отметить, что это все равно будет скомпилировано в метод с именем __get@color, а это нужно программисту теоретически знать. Сейчас уже есть синтаксис вида:var alphaBlending
function get alphaBlending(){ return alphaBlending }
function set alphaBlending(a){
alphaBlending = a
if(a){
glEnable(GL_BLEND)
glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST)
}else{
glDisable(GL_BLEND)
}
}
function __get(name){
echo("global property \""name"\" is not declared\n")
echo "back trace\n"
printBackTrace(1)
echo "\n"
}
function Object.__get(name, autoCreate){
if(autoCreate) return;
echo("object property \""name"\" is not declared\n")
echo "back trace\n"
printBackTrace(1) // skip current function
echo("=======\ntarget "this"\n\n")
}
function Userdata.__set(name, value){
echo("userdata property \""name"\" is not declared, set value "value"\n")
echo "back trace\n"
printBackTrace(1) // skip current function
echo("=======\ntarget "this"\n\n")
}
function assert(a, message){
if(!a){
print(message || "assert failed")
printBackTrace(1)
terminate()
}
}
setErrorHandler(function(code message file line){
var type = "ERROR"
if(code == E_WARNING)
type = "WARNING"
else if(code == E_NOTICE)
type = "NOTICE"
echo("["type"] "message"\n")
echo "back trace\n"
printBackTrace(1) // skip current function
})
function printBackTrace(skipNumFuncs){
for(var i, t in debugBackTrace(skipNumFuncs + 1)){ // skip printBackTrace
echo("======= ["i"]\n")
// echo(" line: "t.line", pos: "t.pos", token: "t.token", file: "t.file"\n")
echo(" line: "t.line", pos: "t.pos", file: "t.file"\n")
echo(" function: "t.name", arguments: "t.arguments"\n")
// print concat(" object: "(t.object === _G && "<<GLOBALS>>" || t.object)"\n")
}
}
echo & print перехватывается в виртуальной функции унаследованного от класса ObjectScript и записывается в файл. Таким образом я всегда вижу наличие проблемы, printBackTrace при этом дампит детальный call stack, поэтому я могу понять от куда был вызов и с какими параметрами.alert((function(x){
return x*x;
})(10));(function(){( return function(){( ... {( return function(){ return stuff }() )} ... )}() )}() )x=>x*x подумать над вариантом var f = { x,y => x*y }, тогда избавляемся от лишних круглых скобок, в простом случае скобки можно опустить, но появятся другие проблемы.type property = 10 // 1 вариант значения по умолчанию
{
// 2 вариант значения по умолчанию
default = 10
get { return fieldof(property) } // сокращенный вариант get => fieldof(property)
set { fieldof(property) = value; raise(property) }
// далее при желании raise { ... }
}
add(A,B)->A+B.foreach (Foo foo in bar<Foo>)
{
if (foo==smth) {bar[foo].RemoveItem}
}
a = {x=1, y=3; "zero" "one", "two" last:7,}var double = function( value ) { return value * 2 }
print double 2
print double {2}
print( double 2 )
print double {2}[0]
print double {1 + 1}()<function:477>
<function:477> 2
0
4
0
var s = ""; for(...) s = s + "something"и поддерживает ООП во всей своей красе.
IvanPerson не знает, как реализован метод walk() из класса Person, но может использовать этот метод. В классе IvanPerson нет необходимости даже определять walk() до тех пор, пока не понадобиться изменить его. Все классы наследуют методы своих родителей и определяют только новые методы или те, которые нужно изменить — это называется инкапсуляция. var IvanPerson = extends Person {
__construct = function(){
super("Ivan", "Petrov")
}
walk = function(){
echo "Soneone named "
super()
}
}
var p = IvanPerson() // создадим экземпляр класса IvanPerson
p.walk()
print p
Soneone named Ivan Petrov is walking!
{"firstname":"Ivan","lastname":"Petrov"}
this, воспользуйтесь методом call класса Function. Продолжая предыдущий пример: Person.walk.call(p)
Ivan Petrov is walking!
call вызывает функцию с нужным нам this и остальными параметрами, с которыми call был вызван. Если остальные параметры собраны в масив, то воспользуйтесь методом apply класса Function. function foo(a, b){ return a + b }
function bar(){ return foo.apply(null, arguments) }
print bar(2 3)
print bar(4 5)
5
9
function setOptions(options){
options = objectof options || {}
....
}
function setOptions(options){
options = options || {}
....
}
ObjectScript — новый язык программирования