Verwenden Sie Python-ähnliche Bereiche mit Rust

Einführung

Ich werde Ihnen zeigen, wie Sie Python-ähnliche Bereiche mit Rust verwenden.

Es kann wie folgt verwendet werden.

// for i in range(5):
//     print(i)
for i in range!(5) {
    println!("{}", i);
}

// for i in range(1, 5):
//     print(i)
for i in range!(1, 5) {
    println!("{}", i);
}

// for i in range(1, 5, 2):
//     print(i)
for i in range!(1, 5, 2) {
    println!("{}", i);
}

// for i in range(5, 1, -1):
//     print(i)
for i in range!(5, 1, -1) {
    println!("{}", i);
}

Weise

Sie können einen Python-ähnlichen Bereich mit den folgenden Makros implementieren.

macro_rules! range {
    ($stop:expr) => {
        0..$stop
    };
    ($start:expr, $stop:expr) => {
        $start..$stop
    };
    ($start:expr, $stop:expr, -$step:expr) => {
        ($stop + 1..$start + 1).rev().step_by($step)
    };
    ($start:expr, $stop:expr, $step:expr) => {
        ($start..$stop).step_by($step)
    };
}

Grundsätzlich wird der gleiche Iterator wie bei der Python-Bereichsfunktion zurückgegeben.

Dinge unmöglich

Wenn Sie einen negativen Schritt angeben, kann "step_by ()" nur "usize" empfangen, daher müssen Sie den Iterator mit "rev ()" umkehren. Daher wird das Vorhandensein oder Fehlen von "-" durch Mustervergleich beurteilt, und es wird entschieden, ob "rev ()" ausgeführt werden soll. Wenn eine Variable eine negative Zahl enthält und als Schritt angegeben wird, kann sie daher nicht durch Mustervergleich als negative Zahl bestimmt werden, was zu einem Kompilierungsfehler führt.

//Kompilierungsfehler
let x = -1;
for i in range!(5, 1, x) {
    println!("{}", i);
}

Ich würde gerne wissen, ob es einen Weg gibt, dies gut umzusetzen.

Schließlich

Rostmakros haben viel Freiheit, also macht es viel Spaß.

Recommended Posts

Verwenden Sie Python-ähnliche Bereiche mit Rust
Verwenden Sie RTX 3090 mit PyTorch
Verwenden Sie ansible mit cygwin
Verwenden Sie pipdeptree mit virtualenv
[Python] Verwenden Sie JSON mit Python
Verwenden Sie Mock mit Pytest
Verwenden Sie Gentelella mit Django
Verwenden Sie Tensorboard mit Chainer
Verwenden Sie DynamoDB mit Python
Verwenden Sie pip mit MSYS2
Verwenden Sie Python 3.8 mit Anaconda
Verwenden Sie Copyright mit Spacemacs
Verwenden Sie Python mit Docker
Verwenden Sie WENIGER mit Django
Verwenden Sie Enum mit SQLAlchemy
Verwenden Sie Tensorboard mit NNabla
Verwenden Sie GPS mit Edison
Erweitern Sie NumPy mit Rust
Verwenden Sie die Trello-API mit Python
Verwenden Sie gemeinsam genutzten Speicher mit gemeinsam genutzten Bibliotheken
Verwenden Sie Richtungsdiagramme mit networkx
Verwenden Sie TensorFlow mit Intellij IDEA
Verwenden Sie die Twitter-API mit Python
Verwenden Sie pip mit Jupyter Notebook
Verwenden Sie DATE_FORMAT mit dem SQLAlchemy-Filter
Verwenden Sie TUN / TAP mit Python
Verwenden Sie sqlite3 mit NAO (Pepper)
Verwenden Sie die load_extensions von sqlite mit Pyramid
Verwenden Sie Windows 10-Schriftarten mit WSL
Verwendung von Chainer mit Jetson TK1
Verwenden Sie SSL mit Sellerie + Redis
Verwenden Sie Maxout + CNN mit Pylearn2
Verwenden Sie WDC-433SU2M2 mit Manjaro Linux
Verwenden Sie OpenBLAS mit numpy, scipy
Verwenden Sie die Unterschall-API mit Python3
Verwenden von Sonicwall NetExtener mit Systemd
Verwenden Sie prefetch_related bequem mit Django
Verwenden Sie einen AWS-Interpreter mit Pycharm
Verwenden von Bokeh mit IPython Notebook
Verwenden Sie MLflow mit Databricks ④ - Anrufmodell -
Benutze Rust, um Pocket Miku zu bewegen.
Python: So verwenden Sie Async mit
Verwenden Sie eine Point Grey-Kamera mit Python (PyCapture2).
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Verwenden Sie PX-S1UD / PX-Q1UD mit Jetson Nano
Verwenden Sie die Vorschaufunktion mit aws-cli
So verwenden Sie virtualenv mit PowerShell
Verwenden Sie NAIF SPICE TOOL KIT mit Python
Verwenden Sie rospy mit virtualenv in Python3
Markdown mit Jupyter-Notebook verwenden (mit Verknüpfung)
Verwenden Sie Python in pyenv mit NeoVim
Verwenden Sie Tensorflow 2.1.0 mit Anaconda unter Windows 10!
Verwenden Sie die Windows 10-Sprachsynthese mit Python
Verwenden Sie die Curl / JQ-Bibliothek mit Go
Ich kann kein Japanisch mit Pyperclip verwenden
Verwenden Sie die Kamerakalibrierungsdatei mit OpenCvSharp4
Verwenden Sie die Funktion MULTI_ORG mit re: dash
Verwenden Sie OpenCV mit Python 3 in Window