본문 바로가기

전체보기

(168)
[LeetCode] 13. Roman to Integer https://leetcode.com/problems/roman-to-integer/ Roman to Integer - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 이거보다 좋은 코드를 잘 모르겠다 ㅋㅋ object Solution { def romanToInt(s:String): Int = { if(s.isEmpty) 0 else if (s.startsWith("CM")) 900 + romanToInt(s.substring(2)) else if (s.star..
Proxy를 할 땐 request 객체를 모두 복사하자. 케이스 바이 케이스지만 proxy를 할 때 request 객체의 정보를 생략하고 요청 자체만 proxy해서 문제가 발생했다. 필요한 정보가 무엇인지 파악해서 새로운 request에 해당 정보를 삽입하는 노하우가 필요하다.
[Scala] 스칼라는 예외를 이용하지 않고 오류를 처리한다. 스칼라도 예외 처리가 없진 않다. 아래의 예시처럼 try catch 문도 존재한다. def main(args: Array[String]): Unit = { def falling(i:Int): Int = { val y: Int = throw new Exception("THREAD") try { val x = 42 + 5 x + y } catch { case e: Exception => 43 } } falling(3) println("이러면 에러가 발생한다.") } 그런데 참조에 투명하지 않다. 참조 투명성을 가지려면 문맥에 의존하지 않아야하는데 위의 코드는 try 블록에 속해있는지, 속해있다면 어느 try 블럭에 속해있는지에 따라 결과가 달라진다. 즉, 치환모형의 간단한 추론이 불가능해지고, 형식에 안전하..
takes 0 ms class sbt.internal.inc.MappedVirtualFile cannot be cast to class java.io.File (sbt.internal.inc.MappedVirtualFile is in unnamed module of loader sbt.internal.MetaBuildLoader @1d296da; java.io.File is in module java.base of loader 'bootstrap').. Scala Play라는 웹 프레임웤에 Quill을 사용해서 H2에 연결하려다 제목과 같은 에러가 발생했다. 여러 이유가 있을텐데, 적어도 내 경우는 h2 tcp 연결이 되지않는 문제였다. (정확한 원인을 파악하려고 코드를 뜯으려했으나.... Quill git lab에서 아직 리팩토링 덜됐으니까 보지말라고했다.) dataSource.url = "jdbc:h2:tcp://localhost/~/test;DB_CLOSE_DELAY=-1" 이 설정값을 dataSource.url = "jdbc:h2:mem:defaulth2;DB_CLOSE_DELAY=-1" 이렇게 바꿔주면 에러가 안난다. defaulth2는 데이터베이스 이름이니까 얼마든지 바꿔도 된다.
[Scala] 다형성 [T]는 컴파일 타임에 사라진다. 스칼라는 다형성을 지원한다. def testFunction[T] (i: T): T = ??? 위의 함수는 i에 오는 타입에 따라 리턴 타입도 결정된다. 그런데 이런 Type 은 Compile Time에 모두 사라진다. 즉, 컴파일러에게 힌트만 주는 것이지 runtime때는 아무 효력이 없다.
[Scala] if true 1 else false 의 타입은 뭘까? scala> if (true) 1 else false val res0: AnyVal = 1 놀랍게도 AnyVal이다. AnyVal은 1:Int와 false:Boolean의 공통 조상이다. 이렇게 생각할 수 있다. "아니, 뻔하게 리턴값이 1인데 당연히 Int여야하는거 아닌가?" 저 문장에서 컴파일러가 Int로 타입 바인등을 하면 나중에 저 조건문이 바뀔 경우 관련된 모든 함수를 수정해야한다. 즉 프로그램의 안정성을 해친다. 그래서 가장 상위타입으로 타입바인딩 한다.
[React] Module not found: Can't resolve '@material-ui/core/Styles' in 'Project/src' Module not found: Can't resolve '@material-ui/core/Styles' in '/home/ubuntu/SMLM_frontend/src' Styles와 style은 다르다. vscode에서 작업할 때는 알아서 해당 파일을 찾아줬기 때문에 문제가 없었는데 ubuntu에서 작업할 때는 해당 모듈이 없어서 에러가 떳다. 깃은 대소문자를 체크하지 않기 때문에, git pull을 받았어도 git origin에 있는 파일과 대소문자가 다를 수 있다. 이를 꼭 체크해야한다는 걸 깨달았다.
[Scala] Call-by-value 와 Call-by-name Call by value는 매개변수에 대한 계산을 끝낸 후 함수로 진입하고 Call by name은 함수 내에서 매개변수가 쓰일 때 비로소 계산을 시작합니다. // a와 b를 받아서 a를 return 하는 함수입니다. def test(a:Int, b:loop) = a // Call-by-Value : b에 대한 계산이 끝나지 않기 때문에 return을 돌려주지 않습니다. def test(a:Int, b:loop) = a // Call-by-Name : b는 함수 내부에서 쓰이지 않기 때문에 a를 돌려줍니다. def test(a:Int, b:loop) = a 스칼라는 대부분의 경우 Call-by-Value를 사용하지만, 함수가 일급 객체로서 매개변수로 넘어갈 때는 Call-by-Name을 사용합니다. 함수..
[Scala] lazy val을 써야하는 경우 val는 변수가 선언될 당시 실행되고 lazy val은 해당 변수에 접근할 때 실행된다. def factorial(n:Int):Unit = { val cc = bb(n,1) def bb(n:Int, acc:Int): Int = { if (true) 5 else 3 } } 다음과 같이 선언하면 forward reference extends over definition of value cc 이런 에러 메시지를 볼 수 있다. val cc를 lazy val cc로 교체하면 컴파일은 성공한다. def factorial(n:Int):Unit = { lazy val cc = bb(n,1) def bb(n:Int, acc:Int): Int = { if (true) 5 else 3 } } 그렇다면 다음과 같은 코드는 어..
[Scala] 순수함수와 참조투명성, 치환모형 순수함수 : 부수 효과가 없는 것 부수효과 : 함수 외부세계와의 일정한 상호작용이 있는것 class Gift { def buyGift(cash:Cash) : MacBook = { val MacBook = new Mac() cash.charge(MacBook.price) // 외부세계와의 상호작용이 있다. MacBook } } 참조투명성: 만일 모든 프로그램 p에 대해 표현식 e의 모든 출현을 e의 평가 결과로 치환해도 p의 의미에 아무 영향도 없다면 그 표현식 e는 참조 투명성이 있다. 그리고 이 참조에 투명한 모든 x에 대해 f(x)가 참조에 투명하면 함수 f는 순수하다. 예를 들어 '덧셈연산'은 순수함수다. 2 + 3 = 5 라는 표현식에 대해 프로그램 전체에 산재되어있는 2+3을 5로 바꿔도 프로그..