Jak mogę napisać string.format() lub sprintf() w coffeescript?coffeescript wersja string.format, sprintf() itp. Dla javascript lub node.js
Odpowiedz
Wydaje się to zrobić trick:
String.prototype.format = ->
args = arguments
return this.replace /{(\d+)}/g, (match, number) ->
return if typeof args[number] isnt 'undefined' then args[number] else match
przelicza się przy zastosowaniu niektórych javascript from fearphage
które następnie mogą być wykorzystane tak:
fmt = "<p>{0} {1} (<a href='mailto:{2}'>{2}</a>)</p>"
mystring = fmt.format "Fred", "Flinstone", "[email protected]"
mystring będzie wówczas:
<p>Fred Flinstone (<a href='mailto:[email protected]'>[email protected]</a>)</p>
Korzystanie z # {var} podejście (na przykład podczas idealny podany) nie działa z ciągiem, które muszą być poddane recyklingowi kilkakrotnie. W pętli sytuacji na przykład:
HTML_header = fs.readFileSync('includes/notify/header.html').toString()
HTML_managerOpen = fs.readFileSync('includes/notify/managerOpen.html').toString()
HTML_student = fs.readFileSync('includes/notify/student.html').toString()
HTML_managerClose = fs.readFileSync('includes/notify/managerClose.html').toString()
HTML_footer = fs.readFileSync('includes/notify/footer.html').toString()
HTML_final = HTML_header
getter2 = (r, callback) ->
HTML_final += HTML_managerOpen.format r.EMAIL, r.FNAME, r.LNAME, r.STUDENTS.length, r.PHONE, r.MEMAIL, r.MFNAME, r.MLNAME
async.forEachSeries r.STUDENTS, getter3, (err) ->
HTML_final += HTML_managerClose
callback null
getter3 = (r, callback) ->
HTML_final += HTML_student.format r.EMAIL, r.FNAME, r.LNAME, r.PHONE, r.DESCRIPTION, r.ENROLLED, "", "", "", "", "", "", r.CERTEXAMSCORE, r.COIKEY
callback null
async.forEachSeries results, getter2, (err) ->
cback null, HTML_final + HTML_footer
Tak więc dzieje się tutaj 2 rzeczy. Pierwszym z nich jest interpolacja, który coffeescript bezpośrednio wspiera stosowanie podwójnych cytowany literały ciągów i składnię stylu rubin tak:
"The #{speed} #{color} #{animal} jumped over the lazy dog"
który zastąpi zastępcze z odpowiednimi zmiennymi z zakresu lokalnego. To jest idiomatyczny sposób na obsługę interpolacji napisów w coffeescript (i ruby).
Drugie to formatowanie, które prawdopodobnie powinno być obsługiwane osobno, jeśli chcesz uzyskać liczby z określonymi miejscami dziesiętnymi, tysiące oddzielone przecinkami, zera wiodącymi lub podobnymi rzeczami. Jednak coffeescript można interpolować formatowanie, tak więc można zrobić
"Free shipping on orders over #{currency(freeShipAmount)}"
dla innych cech z formatujących stylu C, rzucić okiem na JavaScript sprintf (który znalazłem na this answer)
Dobra sprawa - dziękuję za przypomnienie, że próbuję znaleźć rozwiązanie string.format() zamiast ".... # {var} ...." – jiy
Czy Coffe Script ma specjalną składnię dla wiodących zera? –
Nie, skrypt coffe zawiera interpolację dowolnych wyrażeń do literałów łańcuchowych. Nie ma specjalnego wsparcia dla formatowania danych bezpośrednio w coffeescript. Użyj dowolnej biblioteki javascript do formatowania, a następnie do interpolowania coffeescript. –
idiomatyczne wersji zaakceptowanej odpowiedzi:
String::format = (args...) ->
@replace /{(\d+)}/g, (match, number) ->
if number < args.length then args[number] else match
- 1. Czy istnieje odpowiednik sprintf dla node.js
- 2. Dobre IDE dla node.js + coffeescript + jaśminu
- 3. Konwerter DWG dla biblioteki Node.js lub Javascript
- 4. tłumaczenia C++ 'Format s sprintf ciąg C#' s string.Format
- 5. Prawidłowy format string dla string.Format lub podobny
- 6. Minimalna implementacja sprintf lub printf
- 7. Tryb Coffeescript dla konsoli węzła?
- 8. Jakakolwiek funkcja `map` Javascript lub Coffeescript, która przekształca wartości * obiektu *?
- 9. Użyj coffeescript/javascript "throw error" lub "throw new Error (error)"?
- 10. Konwertuj funkcję coffeescript na javascript
- 11. Który jest wydajny, itoa lub sprintf?
- 12. String.Format dla waluty na TextBoxFor
- 13. string.Format zgłasza wyjątek System.Format w HTML + javascript
- 14. Jak dokumentować struktury danych JavaScript/CoffeeScript
- 15. Wersja Node.js w wierszu poleceń? (Nie REPL)
- 16. Przykład użycia klas Coffeescript i RequireJS (lub Curljs lub podobnych) dla biblioteki przeglądarki po stronie klienta
- 17. coffeescript, jade, stylus -> js, css asset manager? node.js
- 18. coffeescript Undefined
- 19. Wtyczki Sandboxed dla Node.js
- 20. skrócona wersja ExpandoObject lub słownik?
- 21. strcat() vs sprintf()
- 22. Konwersja projektu CoffeeScript na JavaScript (bez zminimalizowania)?
- 23. Jak przekonwertować JavaScript foreach pętli/funkcję coffeescript
- 24. Wykrywanie środowiska: node.js lub przeglądarka
- 25. seek() odpowiednik w javascript/node.js?
- 26. Wady, zalety itp. Między ILMerge lub ResolveAssembly dla osadzania złożeń?
- 27. wersja Vanilla JavaScript jQuery .Kliknij
- 28. Znak zapytania składnia z coffeescript bez coffeescript
- 29. Różnice między "rozszerzeniami" w coffeescript i "util.inherits" w pliku node.js
- 30. Kiedy Railsy kompilują CoffeeScript?
Czy to jest pytanie? –