LINUX.ORG.RU

Использование переменной в раст

 


0

2

Привет!

Нубский вопрос, но почему в строке 7 выводится дата, а в 6 выхлоп получается именно такой, какой и написан в коде, т.е. без использования переменной?

use std::fs;
use chrono::{DateTime, Utc};

fn main() -> std::io::Result<()> {
    let now: DateTime<Utc> = Utc::now();
    fs::write("date {}.txt", "nowformat")?;
    println!("{}", now.format("%Y-%m-%d"));
    Ok(())
}

Странно было бы если бы они выводили одно и тоже, тогда на кой черт нужен бы был этот макрос?

Кстати, а где тут использование переменной в 6 строке

вроде как

pub fn write<P: AsRef<Path>, C: AsRef<[u8]>>(path: P, contents: C) -> Result<()>

То есть там в принципе никакой подстановки по {} быть не может, если не сформировать строку path изначально с такой подстановкой.

abcq ★★
()
Последнее исправление: abcq (всего исправлений: 2)

Может тебе вот так нужно?

use std::fs;
use chrono::{DateTime, Utc};

fn main() -> std::io::Result<()> {
    let now: DateTime<Utc> = Utc::now();
    let now_str = now.format("%Y-%m-%d").to_string();
    fs::write("date {}.txt", &now_str)?;
    println!("{}", now_str);
    Ok(())
}
vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Да, можно сказать оно. Чуть поправил только

спасибо!

admucher ★★
() автор топика
Ответ на: комментарий от vertexua
let now_str_or_path = format!("date {}.txt", now.format("%Y-%m-%d"));

Ему что-то такое надо было на самом деле, просто он неправильно понял какие аргументы передаются во write и для чего они.

abcq ★★
()
Ответ на: комментарий от vertexua

Привет! А вот тут сможете подсказать? Проблема в функции main, а конкретно значения не могу подставить. Вроде все просто, но перепробовал много разных вариантов. Скинул самый простой вариант, чтоб было понятно в чем затык. Тут что-то с impl надо придумывать?

use std::fs;
use std::fs::File;
use chrono::{DateTime, Utc};
use std::io::{BufRead, BufReader};
use std::io::Error;
use std::path::Path;

fn main() -> std::io::Result<()> {
    getdate();
    gettime();
    fs::write(&getdate, &gettime); // файл с названием "дата" и внутри значение строки
    Ok(())
}


// получаем дату
fn getdate() { 
    let now: DateTime<Utc> = Utc::now();
    println!("{}", now.format("%Y-%m-%d"));
}


// получаем значение строки
fn gettime() {
    let path = Path::new("settings.ini");
    let line_num = 2usize;
    let line = get_line_at(&path, line_num - 1);
    println!("{}", line.unwrap());
}
 
fn get_line_at(path: &Path, line_num: usize) -> Result<String, Error> {
    let file = File::open(path).expect("File not found or cannot be opened");
    let content = BufReader::new(&file);
    let mut lines = content.lines();
    lines.nth(line_num).expect("No line found at that position")
}
admucher ★★
() автор топика
Ответ на: комментарий от admucher

а что ты собсно пишешь тем вызовом? getdate и gettime ничего не возвращают

anonymous
()
Ответ на: комментарий от admucher
use chrono::{DateTime, Utc};
use std::fs;
use std::fs::File;
use std::io::Error;
use std::io::{BufRead, BufReader};
use std::path::Path;

fn main() -> std::io::Result<()> {
    let date = getdate();
    let time = gettime();

    fs::write(date, time).unwrap(); // файл с названием "дата" и внутри значение строки
    Ok(())
}

// получаем дату
fn getdate() -> String {
    let now: DateTime<Utc> = Utc::now();
    println!("{}", now.format("%Y-%m-%d"));
    now.format("%Y-%m-%d").to_string()
}

// получаем значение строки
fn gettime() -> String {
    let path = Path::new("settings.ini");
    let line_num = 2usize;
    let line = get_line_at(&path, line_num - 1).unwrap();
    println!("{}", &line);
    line
}

fn get_line_at(path: &Path, line_num: usize) -> Result<String, Error> {
    let file = File::open(path).expect("File not found or cannot be opened");
    let content = BufReader::new(&file);
    let mut lines = content.lines();
    lines.nth(line_num).expect("No line found at that position")
}
anonymous
()
Ответ на: комментарий от anonymous

Спасибо

Ещё проще чем думал. Делал так, вводил переменные, но не писал .uwrap. Что он даёт, кстати?

admucher ★★
() автор топика

Ты сделаешь всем большое одолжение, а себе так и вовсе окажешь неоценимую услугу, если прямо сейчас откажешься от обреченной на провал идеи попытаться выучить Rust. Может быть, потом, в далеком и светлом будущем такой вариант и появится, но сейчас ты нихренашеньки не понимаешь, при том что пишешь хелловорлды 😄

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Да, согласен. Я не программист и даже хелло вордов не писал, от туда и такие глупости, но палочкой интересно потыкать

admucher ★★
() автор топика
Ответ на: комментарий от fsb4000

Ни на каком :) Первый опыт, а про uwrap спрашиваю, потому что с мобилы сейчас, потому и не гуглю

admucher ★★
() автор топика
Ответ на: комментарий от admucher

No way. Хотя бы условный Python потыкай для начала или JavaScript. Иначе удовлетворение твоего интереса будет проходить подобно анальному сексу без смазки.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Иначе удовлетворение твоего интереса будет проходить подобно анальному сексу без смазки.

Ох уж эти аналогии фанатиков Раста :). @admucher, не связывайся ты лучше с этим расто-кодлом, лучше выбери себе какой-нибудь удобный, практичный язык, и начинай свой увлекательный путь в мир программирования :). Удачи!

anonymous
()
Ответ на: комментарий от anonymous

@admucher, не связывайся ты лучше с этим расто-кодлом, лучше выбери себе какой-нибудь удобный, практичный язык, и начинай свой увлекательный путь в мир программирования

действительно, какая-нибудь незамысловатая сишка куда лучше подойдет для вката в увлекательный мир «почему оно не работает?? 😕🙁☹️»

Virtuos86 ★★★★★
()
Ответ на: удаленный комментарий

Неправда, раст имеет очень красивый синтаксис. Код ТС переусложнен и избыточен, а так — обычный код на статике без развитого вывода типов.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Неправда, раст имеет очень красивый синтаксис.

С каких это пор у безпрототипных, но тем не менее javascript-подобных языков – нормальный синтаксис? Нормальный синтаксис это типа

Печатай дату по-русски.

Нахрена все остальные, только лишь вводящие в заблуждения излишества и дрочь?

anonymous
()
Ответ на: комментарий от admucher

Не знал что чтобы записать дату время в файл нужна высокая производительность уровня Си. Конечно для этой нужды не стоит связываться с жабаскриптом, руби или пейтоном. Один запуск программы будет в 100 раз дольше ее выполнения.

bhfq ★★★★★
()
Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от bhfq

Не знал что чтобы записать дату время в файл нужна высокая производительность уровня Си

Конечно нет, это всего лишь проба пера, чтобы понять как оно все устроено. Но надо смотреть в будущее)

Конечно для этой нужды не стоит связываться с жабаскриптом, руби или пейтоном. Один запуск программы будет в 100 раз дольше ее выполнения.

Поэтому накостылял то что нужно было (далеко не только создание файла :) ) на .bat. Ест памяти ~2 мб, работает от XP до 10 и моментально, но изучать что-то серьезное тоже надо

admucher ★★
() автор топика

Смотрю зреет новая тема для холивара ) А по теме вроде вам уже нарисовали ответ, по поводу unwrap это эдакий костыль языка который нужен для того чтобы выдернуть значение из заврапленного в option или result возврата из функции или чего-то подобного, но суть в том что злоупотребление им идет в разрез с вводом этих option и result в язык. Будете и дальше писать станет понятно что вас насильно ведут по дороге приключений через option как вариант матчинга и result как попытку сделать из этого обработку ошибок и на этих вещах завязан почти весь код раста. Можете еще хаскель поизучать там эти концепции тоже присутствуют.

anonymous
()
Ответ на: комментарий от admucher

Поэтому накостылял то что нужно было (далеко не только создание файла :) ) на .bat

Тебя уже не спасти 🙁

Разве что ты забудешь этот недоязычек без грепа и не начнешь с чистого листа без костылирования.

Stil ★★★★★
()
Ответ на: комментарий от anonymous

Эти концепции и в c++ никто не мешает использовать

Stil ★★★★★
()
Ответ на: комментарий от t184256

Это ты так сейчас АЛГОЛ-подобные назвал? =)

Этот -> и ALGOL? Уверен, что моззиловцы дико фапают на собой продвигаемые же в JS синтаксические фигни, и от одурманивания их же добавляют и в Rust. Как ни странно, но новый ЯП всегда выглядит как нагромождение стильных и модных фигнь. А законодателем стиля и моды по праву считается JS. Доисторическое дерьмо типа ALGOL-а рядом не стоит.

anonymous
()
Ответ на: комментарий от admucher

А что по красивее и более-менее производительное?

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int
main(void) {
    time_t timer;
    char buffer[26];
    struct tm* tm_info;

    timer   = time (NULL);
    tm_info = localtime (&timer);

    strftime (buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info);
    puts (buffer);

    return EXIT_SUCCESS;
}
anonymous
()
Ответ на: комментарий от anonymous

Это совсем другой код.

  1. Читает дату
  2. Создает файлик с названием %date%
  3. Читает строку из файла настроек
  4. Записывает настройки в %date%

На сколько компактен будет такой код?

admucher ★★
() автор топика
Последнее исправление: admucher (всего исправлений: 1)
Ответ на: комментарий от Stil

недоязычек без грепа

вообще-то, он там есть) find называется, как ни странно

admucher ★★
() автор топика
Ответ на: комментарий от anonymous

А законодателем стиля и моды по праву считается JS.

Ой все. Хоть бы существующими языками ограничился.

t184256 ★★★★★
()
Ответ на: комментарий от admucher

На сколько компактен будет такой код?

Компактность в Си решается макросами и библиотеками. Просто пишите библиотеку, а потом просто


#include <stdlib.h>
#include "date_x_lib.h"

int
main (void) {
    date_x_lib_do_the_thing ();
    return EXIT_SUCCESS;
};

Компактней и быть не может.

anonymous
()
Ответ на: комментарий от t184256

Ой все. Хоть бы существующими языками ограничился.

Братан, накати смузи, и вглядись вот в это

elements.map(element => element.length);

Так похоже на Rust…

anonymous
()

Использование переменной в раст

В Метапрог переменных, объектов, классов, … нет.
Одни «жгутики» и «прищепки».

anonymous
()
Ответ на: комментарий от anonymous
use chrono::prelude::*;

fn main() {
    let local;
    let formatted;
    
    local = Local::now();
    formatted = local.format("%Y-%m-%d %H:%M:%S");
    
    println!("{}", formatted);
}
anonymous
()
Ответ на: комментарий от anonymous

Rust:

struct Foo {
    bar: fn(fn(i32) -> i32, i32) -> fn(i32) -> i32
}

C (Правильность не проверялась, не осилил, безразлично):

struct {
    (int *(int)) (bar* (int *(int), int));
};

Rust:

match foo {
    "foo" => do_something_1(),
    "bar" => do_something_2(),
    "baz" => do_something_3(),
    _ => do_something_4(),
}

C:

if (strcmp(foo, "foo")) {
    do_something_1();
} else if (strcmp(foo, "bar")) {
    do_something_2();
} else if (strcmp(foo, "baz")) {
    do_something_3();
} else {
    do_something_4();
}

В упор не вижу чем ржавый вариант хуже.

anonymous
()
Ответ на: комментарий от t184256

И вообще не похоже на лисп или форт. Че сказать-то хотел?

Ты верно говна поел. Иди проспись, тогда подходи, говорить будем.

anonymous
()

Хруст это лутьшый языык!!!!!!!!!!! Ыыыыыыы

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.