목록개발 및 공부/언어 (68)
NeuroWhAI의 잡블로그
코틀린 강좌를 조금씩 보고 있습니다.앱 개발을 하고 싶기에...다만 사정상 안드로이드 에뮬레이터를 돌리기가 힘들어서 진짜 앱 개발 공부는 힘들고언어만 좀 배워두려고 합니다.아래는 끄적여본 첫 코틀린 코드 ㅎㅎ.. package com.neurowhai fun sum(a: Int, b: Int) = a + b fun getStringLengthIfCan(obj: Any): Int? { return if (obj is String) { obj.length } else { null } } fun stringWhatever(obj: Any): String = when (obj) { 1 -> "One" "What" -> "??" is Int -> "is Int" else -> "wtf?" } fun main(ar..
https://stackoverflow.com/questions/28519997/what-are-rusts-exact-auto-dereferencing-rules 위 글을 공부하여 정리한 글입니다. Rust에서 x.bar()처럼 메소드를 호출하는건 T::bar(x)와 같은데 이때 bar의 self와 x가 일치하지 않으면 auto-dereferencing rules이 수행됩니다. 설명하기 전에 단어, 문자 용어 정리하고 하겠습니다. Receiver type : 메소드의 self 타입 (Self가 Foo이고 fn bar(&self);라면 &Foo가 됩니다. Self가 &Foo이고 fn bar(self);여도 &Foo.) x : 메소드의 self로 들어갈 값 T : x의 타입 U : 각 역참조 단계에서의 타입..
Rust. Change mutable reference to immutable. &mut T 형식으로 받았는데 원하는 메소드가 &T에만 구현된 경우가 있었습니다.(C++ 사용자는 뭔소리야 싶겠지만 Rust는 타입이 사용된 상태?마다 다르게 메소드를 구현할 수 있습니다.)아래는 그 오류를 재연한 예제입니다. https://ideone.com/YeENwm trait FooPow { fn pow(&self) -> i32; } struct Foo(i32); impl i32 { self.0 * self.0 } } /*impl i32 { self.0 * self.0 } }*/ fn test1(x: &Foo) { println!("{}", x.pow()); } fn test2(x: &mut Foo) { println..
참고 : https://stackoverflow.com/a/8111750 ADL은 말 그대로 인수에 의존해 이름 공간을 검색하는 기능입니다. 긴 말 필요없고 코드부터 봅시다. 12345678910111213141516171819202122232425262728#include #include namespace foo{ struct Bar { int data; }; void init(Bar& bar) { bar.data = 42; }} int main(){ //using foo::init; //using namespace foo; foo::Bar bar; init(bar); std::cout
사무실에서 코딩하고 있었는데 충공깽스러운 현상을 발견했습니다.대충 "11_11".replace('1', '2')처럼 replace를 쓰는 코드였는데저는 당연히 "22_22"로 결과가 나올 줄 알았습니다.근데 아니더라고요.허미 씌;; 찾아보니 아래처럼 정규식을 쓰거나 편법을 써서 구현해야 한다고 합니다. 정규식 사용:1234String.prototype.replaceAll = function(search, replacement) { var target = this; return target.replace(new RegExp(search, 'g'), replacement);};Colored by Color Scriptercs 분해 후 조립:1234String.prototype.replaceAll = func..
[Serializable]가 지정된 클래스만 가능! 코드: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.InteropServices; namespace Test{ class Program { static void Main(string[] args) { int data1 = 42; double ..
공식 문서 : https://rustbyexample.com/std/result/question_mark.html Rust에는 Result라는 놈이 있는데 말 그대로 어떤 작업의 결과를 표현합니다. 성공했으면 Ok(결과 값), 실패했으면 Err(에러 값) 이렇게요. 때문에 Result에서 결과 값을 받아오려면 패턴 매칭을 사용하거나 unwrap 메소드를 써야하는데 이게 많아지면 보기가 안좋다고 합니다. 그래서 편의 문법으로 나온게 '?' 연산자입니다. 좀 다르겠지만 대충 아래와 같은 정의라고 보시면 됩니다. Result x를 받아서 Ok라면 그 안의 결과 값을 취하지만 Err라면 그 안의 에러 값을 반환합니다. 단순히 return err;가 아닌 이유는 에러간의 변환에 관한 유연성 때문인데 아래에 설명이..
C++처럼 알파벳 'r'로 나타내지만 구분문자열(? 아래 예시에서 '#'에 해당하는 문자열)은 괄호 없이 큰따옴표 밖에 위치합니다. r"foo" == "foo"r#""foo""# == "\"foo\"" https://doc.rust-lang.org/reference/tokens.html#raw-string-literals
아래 링크는 읽어보시면 좋을 것들. execution.h : http://en.cppreference.com/w/cpp/header/execution policy : http://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t stackoverflow : https://stackoverflow.com/a/47706880 C++17에 추가된 표준이라고 합니다. 다 테스트는 안해봤는데 아직 제대로 지원하는 컴파일러를 못찾았습니다. 직역하면 '실행 정책'이 되겠네요. 알고리즘을 순차적으로 실행할지 병렬적으로 실행할지 선택권을 줍니다. 예를 들어서 C++17 버전의 std::sort를 보면 이렇게 ExecutionPolicy를 받는 버전이 추가됬는데 여기..
아시겠지만 Rust에서 trait을 반환형으로 지정하려면 아래처럼 Box같은 Sized struct를 사용해야 합니다. 12345678fn even_iter() -> Box { Box::new((0..).map(|n| n * 2))} fn main() { let first_four_even_numbers = even_iter().take(4).collect::(); println!("{:?}", first_four_even_numbers);}Colored by Color Scriptercs 하지만 아직 stable 버전엔 없는 conservative_impl_trait라는 기능을 사용하면 약간의 수정으로 trait을 반환형으로 지정할 수 있습니다. 공식 문서에 따르면 약간의 성능상 이익도 있다는 것 같습..