openlang

단항 쉼표가 하는 일

Powershell in Action을 읽다가 Chapter 5의 한 부분에서 막혔어요. 결과는 이해하는데, 무슨 용도이고 왜 이렇게 되는지 설명해 주실 수 있나요?

$nested = 4, (5, 6)
$flattened = $nested | foreach { $_ }

$flattened.length

이러면 $flattened.length가 3이 나와요. 납득돼요.

$nested = 4, (5, 6)
$flattened = $nested | foreach { ,$_ }

$flattened.length

이번에는 $flattened.length가 2예요.

$flattened[0]; $flattened[1] -join ","를 실행하면 그 2개 객체가 뭔지는 알겠는데, 두 번째 ForEach 안의 쉼표가 정확히 뭘 하는 건가요?

대충 “4를 객체 하나로 두고 (5,6)도 별도 객체로 유지해. 쪼개지 마.”라는 뜻인가요?

영어에서 번역원문 보기

이어지는 대화 3

서로의 근거를 따라
  1. 고유 링크

    Powershell 파이프라인은 사용자 편의와, 웃기지만 “일관성”을 위해 컬렉션을 “풀어” 줘요. 단항 연산자는 powershell이 그렇게 풀지 못하게 해요. 그 예제들은 썩 좋지 않으니 다른 방식으로 해 볼게요.

    다음 두 코드의 출력을 보세요

    (4, 5, 6) | ForEach-Object {
        Write-Host "Pipeline element now: $_"
    }
    
    Pipeline element now: 4
    Pipeline element now: 5
    Pipeline element now: 6
    ,(4, 5, 6) | ForEach-Object {
        Write-Host "Pipeline element now: $_"
    }
    
    Pipeline element now: 4 5 6

    뒤쪽 예제는 컬렉션 전체를 한 객체로 보내서 풀리지 않아요. 실제로 배열이고, 쉼표 대신 공백이 보이는 건 기본 출력 필드 구분자가 공백이기 때문이에요($ofs에 들어 있어요). 이렇게 확인할 수 있어요

    "$(4, 5, 6)"
    
    4 5 6

    문자열 안에 배열을 넣으면 powershell이 기본 OFS로 원소들을 이어 붙여요. 바꿀 수도 있지만 그럴 일은 드물어요.

    $ofs = '/~/'
    
    "$(4, 5, 6)"
    
    4/~/5/~/6

    제가 이 단항 연산자를 꽤 자주 쓰는 경우는 값들을 나누되 모든 원소를 한 객체 안에 함께 담아 보내고 싶을 때예요.

    ,(-split 'Tavin enjoys powershell') | ForEach-Object {
        [PSCustomObject]@{
            Who   = $_[0]
            Does  = $_[1]
            Topic = $_[2]
        }
    }
    
    Who   Does   Topic
    ---   ----   -----
    Tavin enjoys powershell
    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. Godot 3.3의 GDScript에서 일일이 나열하지 않고 enum 항목을 무작위로 고르기?

    GDScript에서 enum을 이렇게 선언했어요: 가능한 모든 변형을 나열하지 않고 enum 변형을 무작위로 고르고 싶어요. 나중에 변형을 더 추가해도 무작위로 선택하는 코드를 수정하지 않도록요. 이런 방법을 시도해 봤어요:…

    답글 2최근 활동 gdscript
  2. Nim 나머지 연산 문법

    Nim에서는 나머지를 어떻게 표현하나요? cell % 7 == 0를 쓰면 undeclared identifier: '%'가 나옵니다 Google로 검색해도 SO를 찾아봐도 답을 찾지 못했습니다.

    답글 2최근 활동 nim
  3. APL 함수에서 결과 반환하기

    함수 실행이 끝나면 어떤 값을 반환하게 하려면 어떻게 하나요? 예를 들어 이런 것이 있습니다: ROUTINE N ? N ⍴ 12 //이것은 1부터 12까지의 난수 N개를 만듭니다 (N은 함수의 인수입니다). 함수의 결과를 돌…

    답글 2최근 활동 apl