목록개발 및 공부/언어 (68)
NeuroWhAI의 잡블로그
공식 문서 : https://doc.rust-lang.org/std/primitive.str.html#method.matches 예시: 1234567891011121314fn count(value: &str, substr: &str) -> usize { value.matches(substr).count()} fn pick_num(value: &str) -> Vec { value.matches(char::is_numeric).collect()} fn main(){ println!("Count : {}", count("aabcd abaaz zaazxcaxa", "aa")); println!("Numbers : {:?}", pick_num("1a23bc4d"));} Colored by Color Scripte..
https://doc.rust-lang.org/std/primitive.str.html#method.matches 1 2 fn matches(&self, pat: P) -> Matches where P: Pattern cs 대충 이렇게 생긴 str에 있는 메소드 입니다. 입력으로는 Pattern을 받는데 일단 &str, char, 클로저를 넣을 수 있습니다. Pattern에 관해서는 나중에 공부해서 올려보겠습니다. Matches를 반환하는데 요놈이 Iterator를 구현하고 있으므로 결과를 다양하게 사용할 수 있습니다. 아래처럼 collect부터해서 count로 개수를 알수도 있고 각 값을 따로 처리할수도 있습니다. 1 2 3 4 5 let v: Vec = "abcXXXabcYYYabc".matches(..
http://aturon.github.io/features/traits/common.html#avoid-inherent-methods-when-implementing-deref/derefmut-[fixme:-needs-rfc] Avoid inherent methods when implementing Deref/DerefMutThe rules around method resolution and Deref are in flux, but inherent methods on a type implementing Deref are likely to shadow any methods of the referent with the same name.
https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/using-static 'using static'은 C# 6에서 도입된 기능으로서 정적 멤버를 '클래스.정적_멤버' 이런식으로 쓰던것을 'using static 클래스;'를 통해 '정적_멤버'를 바로 쓸 수 있게 해줍니다. 공식 문서의 예를 들자면 기존에 아래와 같은 코드가 있었다고 합시다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 using System; public class Circle { public Circle(double radius) { Radius = radius; } publ..
https://aturon.github.io/style/naming.html 여기를 참고하였습니다. [명명법 종류] snake_case : 단어를 전부 소문자로 적고 언더바로 구분함. SCREAMING_SNAKE_CASE : 단어를 전부 대문자로 적고 언더바로 구분함. CamelCase : 단어의 첫 문자만 대문자로 적으며 구분자 없음.UUID같은 약어는 한 단어로 취급하므로 Uuid로 적어야 합니다. [명명 규칙] Crates : snake_case 논란 있음 (단어 하나만 쓰는걸 권장) Modules(모듈) : snake_case Types(타입) : CamelCase Traits : CamelCase (타동사, 명사, 형용사를 사용하며 '-able'과 같은 접미사를 피하라) Enum(열거형) : C..
https://github.com/murarth/rusti rusti는 파이썬과 같은 인터프리터 언어에선 당연히 되는, 하스켈의 GHCi 같은 기능을 제공하는 툴 입니다. rusti=> 1 + 4 5 이런 느낌이죠.Rust 식을 적으면 바로 실행해서 결과를 알려줍니다. rusti=> use std::env; rusti=> env::args().collect::() ["target/debug/rusti"] rusti=> use std::iter::AdditiveIterator; rusti=> (1..100).filter(|x| *x % 19 == 3).fold(0, |acc, x| acc + x) 303 당연히 이렇게 여러 명령어를 연계하는것도 됩니다. 명령어도 몇개 제공하는데 그중 .type 명령어는 식..
먼저 아래는 보통의 코드 입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 // myclass.h class MyClass { public: MyClass() : m_data(0) { } private: int m_data; public: void setData(int data) { if (data
12345678910111213141516171819202122use std::ops::Deref; struct Foo { v: T} impl Deref for Foo { type Target = T; fn deref(&self) -> &Self::Target { &self.v }} fn main(){ let foo = Foo { v: 42i32 }; println!("{}", *foo); let foo = Foo { v: "neurowhai" }; println!("{:?}", foo.to_uppercase());}Colored by Color Scriptercs42 "NEUROWHAI"말 그대로 Deref trait을 구현하면 역참조 연산을 오버로딩?할 수 있게 해줍니다.foo.to_uppercase..
Holy cow! Cow는 빌려진 값 또는 소유된 값을 표현할 수 있는 enum 입니다. Clone On Write의 약자로 Cow인데요. 말 그대로 변경이 있을때만 복사와 소유가 일어나는 스마트 포인터(?)라고 소개하고 있네요. 이미 소유된 데이터는 복사가 일어나지 않습니다. 뭔 소리야. 사실 이전의 글들은 다 이거 발견하고 공부한겁니다. ...1234567891011121314151617181920use std::borrow::Cow; fn main(){ let data: i32 = 42; let mut cow = Cow::Borrowed(&data); if let Cow::Owned(_) = cow { println!("Owned???"); } *cow.to_mut() = 1234; // 이 시점에..
1234567891011121314151617181920212223242526272829303132333435363738trait Foo { type T: std::fmt::Display; // 연관 타입 선언 fn set(&mut self, data: &Self::T); fn get(&self) -> &Self::T;} struct Bar { data: i32,} impl Foo for Bar { type T = i32; // 연관 타입 정의 fn set(&mut self, data: &Self::T) { self.data = *data; } fn get(&self) -> &Self::T { &self.data }} // Foo를 구현한 녀석의 참조를 받을건데 Foo의 T는 i32로 정의한 녀석만.fn..