Забавно, потому что Stack & nbsp; Overflow на самом деле имеет свою собственную функцию форматирования для прототипа String
под названием formatUnicorn
. Попытайся! Войдите в консоль и введите что-то вроде:
"Hello, {name}, are you feeling {adjective}?".formatUnicorn({name:"Gabriel", adjective: "OK"});
Вы получите следующий вывод:
Hello, Gabriel, are you feeling OK?
Вы можете использовать объекты, массивы и строки в качестве аргументов! Я получил его код и переработал его для создания новой версии String.prototype.format
:
String.prototype.formatUnicorn = String.prototype.formatUnicorn ||
function () {
"use strict";
var str = this.toString();
if (arguments.length) {
var t = typeof arguments[0];
var key;
var args = ("string" === t || "number" === t) ?
Array.prototype.slice.call(arguments)
: arguments[0];
for (key in args) {
str = str.replace(new RegExp("\\{" + key + "\\}", "gi"), args[key]);
}
}
return str;
};
Обратите внимание на умный вызов Array.prototype.slice.call(arguments)
- это означает, что если вы добавляете аргументы, которые являются строками или числами, а не один объект в стиле JSON, вы получаете поведение C # String.Format
почти точно.
"a{0}bcd{1}ef".formatUnicorn("foo", "bar"); // yields "aFOObcdBARef"
Это связано с тем, что slice
из Array
приведет к тому, что будет в arguments
, в Array
, независимо от того, было это изначально или нет, и key
будет индексом (0, 1, 2 ...) каждого элемента массива, приведенного к строке (например, «0», поэтому "\\{0\\}"
для вашего первого шаблона регулярного выражения).
Ухоженная.
libgolang обеспечивает go
и каналы включая работу select
. Вот использование в качестве примера:
chan<int> ch = makechan<int>(); // create new channel
go(worker, ch, 1); // spawn worker(chan<int>, int)
ch.send(1)
j = ch.recv()
_ = select({
_default, // 0
ch.sends(&i), // 1
ch.recvs(&j), // 2
});
if (_ == 0)
// default case selected
if (_ == 1)
// case 1 selected: i sent to ch
if (_ == 2)
// case 2 selected: j received from ch
defer([]() {
printf("leaving...\n");
});
if (<bug condition>)
panic("bug");
go
икра или поток или находящаяся в gevent сопрограмма в зависимости от активированного времени выполнения.