NEWS and docs for hashstrings
This commit is contained in:
parent
deb801edab
commit
0c229ebda5
2
NEWS
2
NEWS
@ -10,6 +10,8 @@ Changes from 0.13.0
|
|||||||
longer names
|
longer names
|
||||||
* Periods are no longer allowed in keywords
|
* Periods are no longer allowed in keywords
|
||||||
* `eval` is now a function instead of a special form
|
* `eval` is now a function instead of a special form
|
||||||
|
* Added a form of string literal called "bracket strings" delimited by
|
||||||
|
`#[FOO[` and `]FOO]`, where `FOO` is customizable
|
||||||
* The compiler now automatically promotes values to Hy model objects
|
* The compiler now automatically promotes values to Hy model objects
|
||||||
as necessary, so you can write ``(eval `(+ 1 ~n))`` instead of
|
as necessary, so you can write ``(eval `(+ 1 ~n))`` instead of
|
||||||
``(eval `(+ 1 ~(HyInteger n)))``
|
``(eval `(+ 1 ~(HyInteger n)))``
|
||||||
|
@ -58,20 +58,41 @@ Unlike Python, Hy provides literal forms for NaN and infinity: ``NaN``,
|
|||||||
string literals
|
string literals
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
Unlike Python, Hy allows only double-quoted strings (e.g., ``"hello"``). The
|
Hy allows double-quoted strings (e.g., ``"hello"``), but not single-quoted
|
||||||
single-quote character ``'`` is reserved for preventing the evaluation of a
|
strings like Python. The single-quote character ``'`` is reserved for
|
||||||
form (e.g., ``'(+ 1 1)``), as in most Lisps.
|
preventing the evaluation of a form (e.g., ``'(+ 1 1)``), as in most Lisps.
|
||||||
|
|
||||||
Python's so-called triple-quoted strings (e.g., ``'''hello'''`` and
|
Python's so-called triple-quoted strings (e.g., ``'''hello'''`` and
|
||||||
``"""hello"""``) aren't supported. However, in Hy, unlike Python, any string
|
``"""hello"""``) aren't supported. However, in Hy, unlike Python, any string
|
||||||
literal can contain newlines.
|
literal can contain newlines. Furthermore, Hy supports an alternative form of
|
||||||
|
string literal called a "bracket string" similar to Lua's long brackets.
|
||||||
|
Bracket strings have customizable delimiters, like the here-documents of other
|
||||||
|
languages. A bracket string begins with ``#[FOO[`` and ends with ``]FOO]``,
|
||||||
|
where ``FOO`` is any string not containing ``[`` or ``]``, including the empty
|
||||||
|
string. For example::
|
||||||
|
|
||||||
Whether running under Python 2 or Python 3, Hy treats string literals as
|
=> (print #[["That's very kind of yuo [sic]" Tom wrote back.]])
|
||||||
sequences of Unicode characters by default, and allows you to prefix a literal
|
"That's very kind of yuo [sic]" Tom wrote back.
|
||||||
with ``b`` to treat it as a sequence of bytes. So when running under Python 3,
|
=> (print #[==[1 + 1 = 2]==])
|
||||||
Hy translates ``"foo"`` and ``b"foo"`` to the identical Python code, but when
|
1 + 1 = 2
|
||||||
running under Python 2, ``"foo"`` is translated to ``u"foo"`` and ``b"foo"`` is
|
|
||||||
translated to ``"foo"``.
|
A bracket string can contain newlines, but if it begins with one, the newline
|
||||||
|
is removed, so you can begin the content of a bracket string on the line
|
||||||
|
following the opening delimiter with no effect on the content. Any leading
|
||||||
|
newlines past the first are preserved.
|
||||||
|
|
||||||
|
Plain string literals support :ref:`a variety of backslash escapes
|
||||||
|
<py:strings>`. To create a "raw string" that interprets all backslashes
|
||||||
|
literally, prefix the string with ``r``, as in ``r"slash\not"``. Bracket
|
||||||
|
strings are always raw strings and don't allow the ``r`` prefix.
|
||||||
|
|
||||||
|
Whether running under Python 2 or Python 3, Hy treats all string literals as
|
||||||
|
sequences of Unicode characters by default, and allows you to prefix a plain
|
||||||
|
string literal (but not a bracket string) with ``b`` to treat it as a sequence
|
||||||
|
of bytes. So when running under Python 3, Hy translates ``"foo"`` and
|
||||||
|
``b"foo"`` to the identical Python code, but when running under Python 2,
|
||||||
|
``"foo"`` is translated to ``u"foo"`` and ``b"foo"`` is translated to
|
||||||
|
``"foo"``.
|
||||||
|
|
||||||
.. _syntax-keywords:
|
.. _syntax-keywords:
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ HyString
|
|||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
``hy.models.HyString`` is the base class of string-equivalent Hy
|
``hy.models.HyString`` is the base class of string-equivalent Hy
|
||||||
models. It also represents double-quoted string literals, ``""``, which
|
models. It also represents string literals (including bracket strings), which
|
||||||
compile down to unicode string literals in Python. ``HyStrings`` inherit
|
compile down to unicode string literals in Python. ``HyStrings`` inherit
|
||||||
unicode objects in Python 2, and string objects in Python 3 (and are
|
unicode objects in Python 2, and string objects in Python 3 (and are
|
||||||
therefore not encoding-dependent).
|
therefore not encoding-dependent).
|
||||||
@ -113,6 +113,12 @@ Hy literal strings can span multiple lines, and are considered by the
|
|||||||
parser as a single unit, respecting the Python escapes for unicode
|
parser as a single unit, respecting the Python escapes for unicode
|
||||||
strings.
|
strings.
|
||||||
|
|
||||||
|
``HyString``\s have an attribute ``brackets`` that stores the custom
|
||||||
|
delimiter used for a bracket string (e.g., ``"=="`` for ``#[==[hello
|
||||||
|
world]==]`` and the empty string for ``#[[hello world]]``).
|
||||||
|
``HyString``\s that are not produced by bracket strings have their
|
||||||
|
``brackets`` set to ``None``.
|
||||||
|
|
||||||
HyBytes
|
HyBytes
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user