String append: Difference between revisions
Content added Content deleted
(Emacs Lisp: Correct example, demonstrate buffer solution) |
|||
Line 636: | Line 636: | ||
=={{header|Emacs Lisp}}== |
=={{header|Emacs Lisp}}== |
||
===version 1=== |
|||
While strings in Emacs Lisp are mutable, they're fixed size. Therefore the <code>concat</code> function creates a new string and the existing string must be referenced twice: |
|||
<lang Emacs Lisp> |
|||
(defun glue (str1 str2) |
|||
<lang Lisp>(defvar str "foo") |
|||
(concat |
(setq str (concat str "bar")) |
||
</lang> |
|||
str ;=> "foobar"</lang> |
|||
===version 2=== |
|||
<lang Emacs Lisp> |
|||
Buffers can be thought of as expandable strings: |
|||
(defun glue (str1 str2) |
|||
(format "%s%s" str1 str2) ) |
|||
<lang Lisp>(let ((buf (get-buffer-create "*foo*"))) |
|||
</lang> |
|||
(with-current-buffer buf |
|||
<b>Eval:</b> |
|||
(insert "foo")) |
|||
<lang Emacs Lisp> |
|||
(with-current-buffer buf |
|||
(setq str "Hello, ") |
|||
(goto-char (point-max)) |
|||
(setq str (glue str "World!") ) |
|||
(insert |
(insert "bar") |
||
(buffer-string))) |
|||
</lang> |
|||
;; => "foobar"</lisp> |
|||
<b>Output:</b> |
|||
<pre> |
|||
Hello, World! |
|||
</pre> |
|||
=={{header|Erlang}}== |
=={{header|Erlang}}== |