본문 바로가기

오탈자 정보

[러스트 프로그래밍 공식 가이드]_오탈자

현재까지 발견된 이 책의 오탈자 정보와 오류, 그리고 보다 매끄러운 문장을 위해 수정한 내용을 안내해드립니다. 번역과 편집 시에 미처 확인하지 못하고 불편을 끼쳐드려 죄송하다는 말씀을 드립니다. 아래의 오탈자 사항은 추후 재쇄 시에 반영하도록 하겠습니다. 

 

이외의 오탈자 정보를 발견하시면 옮긴이(aspnetmvp@gmail.com)나 출판사(help@jpub.kr)로 연락주시면 고맙겠습니다.

 

최종수정일자: 2022년 12월 8

3쇄본 오탈자

193쪽 9.2.2절 4행에서(신O혁 님 제보)
단축(shortchut) 메서드다. ==> 단축(shortcut) 메서드다.

 

115쪽 두 번째 문단에서(eubnara님 제보)
우리가 원하는 이 코드의 실행 결과는 다음과 같다. rect2가 표현하는 사각형의 면적은 rect의 면적보다 작지만, rect3은 rect1보다 너비가 넓기 때문에 완전히 포함되지 않는다.
==>
rect2가 표현하는 사각형의 면적은 rect1보다 작지만, rect3는 rect1보다 크기 때문에 예상되는 이 코드의 출력은 다음과 같다.

 

최종수정일자: 2022년 2월 10

1, 2쇄본 오탈자

116쪽 마지막 행과 117쪽 첫 행에서(김O웅 님 제보)
모듈이 생성하는 이름 공간(namespace)을 정의에 모두 사용된다.
==>
모듈이 생성하는 이름 공간(namespace) 정의에 모두 사용된다.
 
179쪽 예제 8-21 세 번째 행에서 스페이스 하나 없애기(김O웅 님 제보)
let teams  = vec![String::from("블루"), String::from("옐로")];
==>

let teams = vec![String::from("블루"), String::from("옐로")];


232쪽 예제 10-16 아래에서 6번째 행(김O웅 님 제보)
println!("가장 큰 멤버는 x: {}", self.x);

==>

println!("가장 큰 멤버는 x = {}", self.x);
 
253쪽 예제 11-1 코드 들여쓰기 수정(김O웅 님 제보)
#[cfg(test)]
mod tests {
    #[test]
  fn it_works() {
      assert_eq!(2 + 2, 4);
  }
}

==>

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        assert_eq!(2 + 2, 4);
    }

 

257쪽 예제 11-6 코드 마지막 2행에서 들여쓰기 수정(김O웅 님 제보)
  }
}

==>

    }
}
 
284쪽 1번째 Shell 섹션 2번째 행에서(김O웅 님 제보)
Created binary (application) ' minigrep' project

==>

Created binary (application) 'minigrep' project
 
298쪽 예제 12-10 마지막에서 세 번째 줄 들여쓰기(김O웅 님 제보)
});

    // -- 생략 --

==>

    });

    // -- 생략 --
 
299쪽 예제 12-11 하단 코드에서(김O웅 님 제보)

fn run(config: Config) {
    let contents =

 

    fs::read_to_string(config.filename).expect("파일을 읽지 못했습니다.");

==>

fn run(config: Config) {
    let contents = fs::read_to_string(config.filename)

        .expect("파일을 읽지 못했습니다.");

 

302쪽 예제 12-13에서 하단의 아래 행 모두 삭제해야 함(김O웅 님 제보) 
impl Config {
    fn new(args: &[String]) -> Config {
        let query = args[1].clone();
        let filename = args[2].clone();


        Config { query, filename }
    }
}
 
303쪽 두 번째 문단 첫 번째 행에서(김O웅 님 제보)
이 예제에서는 use minigrep::Confg 줄을

==>

이 예제에서는 use minigrep::Config 줄을 


317쪽 예제 12-24 마지막 행에서(김O웅 님 제보)
eprintln!("애플리케이션 에러: {}",  e);

==>

eprintln!("애플리케이션 에러: {}", e);

 

116쪽 본문 첫 번째 문단 2행에서(김O웅 님 제보)

여러 개의 매개변수를 사용하

==>

여러 개의 매개변수를 사용하

 

239쪽 2~3행에서(조O님 님 제보)
또한, 이 함수 스거너처에는
==>

또한, 이 함수 시그너처에는

 

345쪽 예제 13-23 4행에서(조O님 님 제보)

map((a,b)| a * b)  ==> map(|(a,b)| a * b)
 
405쪽 마지막 문단 1행에서(조O님 님 제보)

send 메서드는 self에 대한 가변 참조를 인수로 전달받기 때문에

==>

send 메서드는 self에 대한 불변 참조를 인수로 전달받기 때문에
 
406쪽 마지막 문단 3행에서(조O님 님 제보)

가변 대여값이다. ==> 불변 대여값이다.

 

 

최종수정일자: 2021년 9월 13

1쇄본 오탈자

467쪽 세 번째 문단 1행에서(김O호 님 제보)
request_review 메서드는 현재 상태를 확인해야 하므로 상태값의 소유권이 있다.
==>
이전 상태를 사용하기 위해서는 request_review 메서드가 상태값의 소유권을 가져와야 한다.

 

198쪽 예제 9-9에서(김O호 님 제보)
fn read_username_from_file() -> Result<String, io:Error> {
    fs::read_to_string("hello.txt")?;
==>
fn read_username_from_file() -> Result<String, io::Error> {
    fs::read_to_string(“hello.txt”)

 

408쪽 하단 두 번째 문단 2행에서(정O렬 님 제보)
이 데이터에 대한 가변 접근만 허용한다.
==>
이 데이터에 대한 불변 접근만 허용한다.

 

509쪽 예제 19-3 4행에서(빈 행 포함, 버전 업그레이드로 인한 오류)(이O탁 님 제보)

let rs = &mut num as *mut i32;

==>

let r2 = &mut num as *mut i32;

 

564쪽 예제 20-5 10행에서(빈 행 포함, 버전 업그레이드로 인한 오류)(이O탁 님 제보)

let mut contents = fs.read_to_string(&mut contents).unwrap();

==>

let mut contents = fs.read_to_string("hello.html").unwarp();

 

567쪽 예제 20-9 10행에서(빈 행 포함, 버전 업그레이드로 인한 오류)(이O탁 님 제보)
let contents = fs.read_to_string(&mut contents).unwrap();

==>

let contents = fs.read_to_string(filename).unwrap();

 

292쪽~293쪽 예세 12-6 예제 코드 들여쓰기는 아래 코드로 교체(김O욱 님 제보)

fn main() {

    let args: Vec<String> = env::args().collect();


    let config = parse_config(&args);

 

    println!("검색어: {}", config.query);

    println!("대상 파일: {}", config.filename);


    let contents = fs::read_to_string(config.filename).expect("파일을 읽지 못했습니다.");

    // -- 생략 --
}

struct Config {
    query: String,
    filename: String
}

fn parse_config(args: &[String]) -> Config {
    let query = args[1].clone();
    let filename = args[2].clone();

    Config { query, filename }
}

 

294쪽 예제 12-7 예제 코드 위에서 7행(빈 행 포함)은 아래 코드로 교체(김O욱 님 제보)

fn main() {
    let args: Vec<String> = env::args().collect(); ➊

    let config = Config::new(&args);

    // -- 생략 --
}

// -- 생략 --
impl Config { ➋
    fn new(args: &[String]) -> Config { ➌
        let query = args[1].clone();
        let filename = args[2].clone();

        Config { query, filename }
    }
}

 

302쪽 예제 12-13 예제 코드는 아래 코드로 교체(김O욱 님 제보)

use std::error::Error;
use std::fs;

pub struct Config {
    pub query: String,
    pub filename: String,
}

impl Config {
    pub fn new(args: &[String]) -> Result<Config, &'static str> {
        // -- 생략 --
    }
}

pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
    // -- 생략 --
}

impl Config {
    fn new(args: &[String]) -> Config {
        let query = args[1].clone();
        let filename = args[2].clone();

        Config { query, filename }
    }
}

 

312쪽 예제 12-21 예제 코드 들여쓰기는 아래 코드로 교체(김O욱 님 제보)

pub fn search_case_insensitive<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {

    let query = query.to_lowercase();
    let mut results = Vec::new();

 

    for line in contents.lines() {

        if line.to_lowercase()➋.contains(&query➌) {

            results.push(line);

        }
    }
    results
}

 

288쪽 예제 12-4 중간 부분(김O욱 님 제보)

let contents = fs.read_to_string(filename)

==>

let contents = fs::read_to_string(filename)

 

301쪽 하단 두 번째 문단 1행에서(정O훈 님 제보)

이번에는 run 함수가 에러를 리턴했는지를 판단한기 위해 unwarp_or_else 메서드를

==>

이번에는 run 함수가 에러를 리턴했는지를 판단한기 위해 unwrap_or_else 메서드를

 

301쪽 하단 두 번째 문단 5행에서(정O훈 님 제보)

따라서 굳이 unwarp_or_else 메서드를 이용해

==>

따라서 굳이 unwrap_or_else 메서드를 이용해

 

408쪽 15.5.3절 첫 번째 문단 마지막 행에서(정O훈 님 제보)

하지만 Rc<T>에 RefCall<T>를 저장하면

==>

하지만 Rc<T>에 RefCell<T>를 저장하면

 

288쪽 예제 12-4 가운데 부분(B.H. Kim님 제보)

let contents = fs.read_to_string(filename)

==>

let contents = fs::read_to_string(filename)

 

466쪽~467쪽 예제 17-5에서(정O금 님 제보)

Box<State>;를 모두 Box<dyn State>;로 바꿔야 합니다. 3곳이 있습니다. 

 

468쪽~469쪽 예제 17-6에서(정O금 님 제보)

Box<State>;를 모두 Box<dyn State>;로 바꿔야 합니다. 6곳이 있습니다. 

 

425쪽 예제 16-2 바로 윗문단 아래에서 두 번째 행(정O금 님 제보)

JonHandle에 join 메서드를 

==>

JoinHandle에 join 메서드를

 

21쪽 밑에서 두 번째 문단의 7~8행(정O금 님 제보)

예제의 경우라면 이 값은 사용자가 표준 입력에 입력한 숫자를 표현하는 바이트의 배열이다.

==>

예제의 경우라면 이 값은 사용자가 표준 입력에 입력한 것의 바이트 수다.

 

226쪽 (1) 트레이트 경계 문법 부분의 예제 1행(정O금 님 제보)

pub fn notify<T: Summary>(item T) {

==>

pub fn notify<T: Summary>(item: T) {


401쪽 밑에서 2행(정O금 님 제보)

가변 값 안에 저장된 값을 변경하는 것이 내부 가변성 패턴이다.

==>

불변 값 안에 저장된 값을 변경하는 것이 내부 가변성 패턴이다.

 

302쪽 예제 12-13 2행에서(강O 님 제보)

use std::fs::File 

==> 

use std::fs