인쇄 / 출력 명령문 자체의 행 번호를 출력하는 코드를 작성하십시오 (“Hello World, from line X!”).


25

도전

출력하는 프로그램을 작성 Hello World, from line X!, X행 번호는 실제 인쇄 문 자체의 소스 코드에서입니다.

규칙

  • 이와 관련 하여 문자열출력하는 명령문 첫 번째 행 번호를 표시하려고합니다.stdout
  • 단순히 줄 번호를 찾기 위해 소스 코드를 문자열 (파일 또는 quine)로 검색하지 않아야합니다.
  • 어떤 경우 추가 공백 또는 문장 (코드의 흐름을 방해하지 않는) 소스 코드에 추가됩니다, 그것은해야 런타임에 반영 (해당하는 경우 컴파일 후)

추천

언어로 제공되는 경우 예외 / 스택 추적을 사용하여이 목표를 달성 할 있습니다. 다른 시스템 / 구현에 이식 할 수있는 코드를 사용하는 것이 가장 좋습니다 . 그러나 반드시 필요한 것은 아닙니다 . __LINE__규칙에서 허용하더라도, 와 같은 정의 된 변수를 사용 하지 않는 것이 좋습니다.

승자

  • 커뮤니티인기 콘테스트 (2014 년 6 월 10 일에 종료)이며, 커뮤니티에서 가장 높은 표를 얻은 답변 이 당시의 현재 표를 바탕으로 승자로 선언됩니다.

  • 투표 할 때, 누군가의 대답의 창의성, 정교하거나 흥미로운 점을 고려하십시오 . 그리고 사용되는 프로그래밍 언어의 어려움 / 제약


"첫 번째 줄 번호"는 무엇을 의미합니까? 문장이 여러 줄에 걸쳐있을 경우 어떻게되는지에 대해 이야기하고 있습니까?
user2357112는

@ user2357112 예, 누군가 milti-line 문을 사용해야하는 경우 모호성을 해결하기 위해.
획기적인

제목은 매우 명확하지만 약간 길 수 있습니다.
primo

1
이것에 대한 대답은 지루합니다. 왜냐하면 그것은 나쁜 질문이기 때문입니다. 그것은 asker가 LINE 의 존재를 몰랐던 것과 같습니다 . 사실 나는 투표를하기 위해 특별히 서명했다.
dave

1
@Markasoftware 이전에 라인을 추가 한 경우 출력이이를 반영하도록 변경되지 않습니다.
primo

답변:


48

싱클레어 베이직

10 PRINT "Hello world, from line ";PEEK 23621;"!"

안녕하세요 세계, 10 행부터!

이것은 PEEK현재 행 번호를 저장하는 주소에서 ing하여 모든 행에 대해 작동 하므로 다음과 같이 작동합니다.

341 PRINT "Hello world, from line ";PEEK 23621;"!"

341 행부터 전 세계 여러분 안녕하세요!


그리고 같은 토큰으로 Timex / Sinclair BASIC!
Gabe

나는이 언어를 아는 척하지 않는,하지만 당신은 밖으로 떠날 수없는 STR$당신이 대체하는 경우 +세미콜론으로 징후?
Mr Lister

@MrLister 예, 확실히 작동하지만 항상 +습관에서 s를 사용 합니다.
kitcar2000

40

기본

나는 이것이 요청 된 모든 것을한다고 생각한다.

10 PRINT "Hello World, from line 10!"

5
If any additional whitespace or statements (which do not interrupt the flow of the code) is added to the source code, it should be reflected at run-time (after compiling if applicable). 의도가 있습니다. 또한 10 번째가 아닌 소스의 첫 번째 줄입니다.
Bill Woodger 2014 년

30
소스 코드의 첫 번째 줄이지 만 여전히 10 번째 줄입니다 .
squeamish ossifrage

13
나는 이것이 더 이상 재미없는 범주에 속 한다고 믿는다 . 문자 그대로 요구 사항을 충족하지만 실제로 상상력이없고 흥미롭지 않습니다. 왜 이렇게 많은 투표가 있습니까? (저는 공감했습니다)
Tim S.

18
이것은 다른 언어 (특히 현대 언어)에서 일반적으로 발견되지 않는 BASIC 언어의 측면을 어리석지 만 구체적으로 활용하기 때문에 큰 대답입니다. 가장 인기가 없을 수도 있지만 (시간이 말해 줄 것입니다), __LINE__과 같은 상수를 사용하거나 현재 스택 프레임에서 디버그 정보를 얻는 것 (현재 다른 답변이 현재하는 것)보다 덜 흥미 롭지는 않습니다.
Nick

2
영리하지만, 이것보다 더 많은 투표로 끝나는 것이 없다면 실망 할 것입니다.
agweber 2016 년

35

자바

public class Hello{
    public static void main(String[] args) {
        System.out.println("Hello World, from line "+new Exception().getStackTrace()[0].getLineNumber()+"!");
    }
}

1
나는 좋아한다Thread.currentThread().getStackTrace()
Cruncher

3
. 현재의 스레드에서 호출하면이 같은 일 그래서 Thread.getStackTrace는 (), (새 예외 ()) getStackTrace ()에 ()를 호출
에게 달

1
(여기에 같은 : 이상은 .... 배 같은 대답과 2 개 개의 다른 upvote에 양 (RNG 소스 ...로 사용될 수) codegolf.stackexchange.com/a/30058/10801 )
masterX244

@ masterX244이 두 답변은 정확히 동일 하지 않습니다 . 이것은 getLineNumber()스택 추적 에서 메소드를 사용하는 반면 링크 된 답변 toString()은 행 번호를 찾는 데 사용 됩니다.
획기적인

9
@ masterX244 또한이 답변이 2 시간 전에 나타났음을 주목할 가치가 있습니다. 두 번째로 답을 볼 때 첫 번째만큼 흥미롭지는 않습니다.
primo

30

close STDERR;
open FOOBAR,">",\$_;


print!warn,'Hello World, from line ',/(\d+)\.$/,'!';

를 사용하는 것만 큼 짧지는 __LINE__않지만 아마도 더 흥미로울 것입니다.

warn디버깅 도구 로 이전에 닫히지 않았거나 액세스 할 수없는 경우를 제외 하고 STDERR어떤 파일과 경고가 발행되었는지를 나타내는 명령문을 발행합니다. 이 경우 가장 최근에 열린 파일에 경고가 발행됩니다. 처리-이것은 문서화되지 않은 동작입니다. 기능이나 버그로 더 잘 분류되는지 확실하지 않습니다. 여기서 닫히고 새 파일 핸들 이 열린 것으로 식별되어 변수에 라우팅됩니다 . 그런 다음 경고문의 행 번호를 검색하기 위해 구문 분석되어 인쇄 문에 포함됩니다. STDERR

STDERRFOOBAR$_


3
네, 확실히 더 재미 있습니다 :)
Tal

27

C ++

#include <iostream>
#include <utility>
#include <type_traits>

#define __(A,B,C,...) B##C##A
#define _(A,...) __(__VA_ARGS__, A)
template<unsigned...Is> struct v;
template<unsigned I0, unsigned... Is> struct v<I0, Is...>:v<I0-1,I0-1, Is...> {};
template<unsigned...Is> struct v<0,Is...>:std::integral_constant<unsigned, sizeof...(Is)> {};

int main() {
  std::cout << "Hello world from line " << v<_(EXTRACT,_(Q,_,E,_,$$main$$,),_(@22,,_,_),_(Z,N,L,I,_,,L),__STACK_TRACE__)>::value << "\n";
}

라이브 예


2
이것은 ... 마법사
Paladine

1
이것이 어떻게 작동하는지 보는 데 오랜 시간이 걸렸습니다. 너무 많은 붉은 청어! 이 맛있어요.
sehe

1
어떻게 작동합니까?
0x499602D2

16

루아

print("Hello world, from line "..debug.getinfo(1).currentline.."!")

16

기음#

C # 5.0 [CallerLineNumber]은 트릭을 수행합니다.

using System;
using System.Linq;
using System.Runtime.CompilerServices;
namespace LineNumberConsole
{
    class Program
    {
        public static void Main()
        {
            Console.WriteLine("Hello World, from line {0}!", ToRoman(GetLineNumber()));
            Console.ReadLine();
        }

        private static int GetLineNumber([CallerLineNumber] int sourceLineNumber = 0)
        {
            return sourceLineNumber;
        }

        private static string ToRoman(int number)
        {
            // TODO: Copy some source code from http://pastebin.com/w0hm9n5W
            // Skipped here for brevity
            return number.ToString();
        }
    }
}

산출

Hello World, from line X!

로마 숫자를 사용해야하는 특별한 이유가 있습니까?
Cole Johnson

4
인쇄 라인이 라인 10 인 경우, 질문은 문자 그대로 해석됩니다. X로마 숫자는 10입니다.
OUurous

로마 숫자는 멋진 터치입니다!
NPSF3000

15

기음

#include <stdio.h>
main(){
printf("Hello World, from line %d!", __LINE__);
}

규칙에서 허용하더라도 LINE 과 같은 정의 된 변수를 사용 하지 않는 것이 좋습니다.
vaxquis

@vaxquis, 그렇습니다.하지만 제 대답은 질문에 대한 편집을 시작합니다.
gnibbler

여전히 시끄럽고 너무 명백한 솔루션 IMO입니다. 사람들이 왜 원격으로 재미 있거나 흥미로운 것을 시도하지 않고 전세계의 모든 언어 (PHP, D, Perl 포함)로이 솔루션의 모든 변형을 게시했는지 궁금합니다.
vaxquis

14

파이썬

예 (10 줄, 213 자) :

import sys
import traceback
lineno = None
while True:
    try:
        print 'Hello World, from line %d!' % lineno
        break
    except:
        lineno = traceback.tb_lineno(sys.exc_info()[2])
        continue

여기에서 온라인으로 시도하십시오 . 비 흐름 변경 코드 및 공백을 추가 할 수 있으며 프로그램은 업데이트 된 줄 수를 표시하며,이 코드 스 니펫은 기존 프로그램의 어느 곳에서나 사용할 수 있습니다. 예상 출력 :

Hello World, from line 6!

코드 / 공백이 추가 될 때 작동한다는 것을 보여주는 또 다른 예 (여기에서 온라인으로 시도) . 예상 출력 :

Down we go...
Gotta catch 'em all.
Down we go...
Hello World, from line 11!
Awesome!

12

자바 스크립트

function getLine(n) {
   try {
      to
   } catch (dat) {
      var stack = dat.stack.split('\n');
       for (var i = 0; i < stack.length; i++) {
           if (~stack[i].indexOf ('getLine')) break;          
       }
      return dat.stack.split ('\n')[i + ~~n].match (/:(\d+)/)[1] - ~~window.hasOwnProperty ('__commandLineAPI')
   }
}
//Line 12
console.log ('Hello World, from line ' + getLine(1) + ' !')

참고 : chrome dev 콘솔 내에서 평가 된 표현식은 with명령문 으로 래핑됩니다 . 따라서 우리는 줄을 하나씩 줄이십시오.


2
dat stack , hehe. Firefox 작업을 확인했습니다.
획기적인

1
@Breakthrough :) 예, 크로스 브라우저에서 작동합니다 (최신 Chrome, FF, IE에서만 테스트 됨). Chrome은 콘솔 내에서 평가할 때 모든 문을 with절로 묶으므로 특별한 처리가 필요합니다 .
C5H8NNaO4 2018 년

2
흥미롭지 만 모호한 사용자 이름. 아마도 소듐 글루타메이트? (BTW, 나는 글루타민산이 하나 인 DNA와 아미노산에 대해 의문을 가질 생각이다.)
Level River St

@steveverrill 구글에 따르면, 당신은 맞습니다 !
kitcar2000

@ kitcar2000 아마. 그러나이 화학식을 갖는 다른 덜 알려진 화합물이있다 : 예를 들어, 메틸 아스 파르 산 나트륨 또는 니트로 펜타 노 에이트.
레벨 리버 St

11

파이썬 3

import hashlib
with open(__file__) as f:
    line_num = 0
    for line in f.readlines():
        line = line.rstrip() # make it work with or without newline at the end
        line_num += 1
        if hashlib.sha256(bytes(line, "UTF-8")).hexdigest()[0:6] == 'cc46f7':
            print('Hello world, from line {}!'.format(line_num)) # cc46f7

여보세요 세계, 8 행에서!

이 자체 읽기 코드에는 자체 참조 해시가 포함되어 있습니다. 마지막 줄 (시작 공백과 후행 공백 없음)의 SHA256 합계는로 시작합니다 cc46f7... . print줄을 해시하면 해시가 찾는 마법의 값과 일치한다는 것을 알게됩니다.


line_num = -1로 설정하고 루프 외부에서 인쇄하고 마술 해시를 탈 수 없었습니까?
dave

1
@dave 확실하지 않습니다. 마술 해시는이 솔루션을 영리하게 만듭니다.
Tim S.

내 규칙을 문자 그대로 해석하면 +1 :) 매우 영리합니다.
획기적인

5
@Stefan이 사이트는 최악의 사례에 관한 것입니다. ;)
Tim S.

1
@sehe 대부분 공백 문제로 인한 것입니다. 파일을 만들 때 파일 끝에 줄 바꿈이 없었습니다. 해시하기 전에 줄 끝에서 공백을 제거하는 줄을 추가했습니다. 이제 더 일관되게 작동해야합니다. (또한 공백을 탭으로 변환하지 않아야합니다.) 라이브 버전을 보여주기 위해 ideone에 업로드하려고 시도했지만 거기에서 자체 파일을 읽을 수는 없습니다.
Tim S.

9

GNU 코볼

글쎄, 그들은 할 수 없다고 말했다. 실제로, 나는 할 수 없다고 말한 사람이었습니다. 이제 끝났고 적용되는 방법을 사용하여 더 이상 사용되지 않는 언어 기능이 다시 구현되었습니다.

질문은 다음과 같이 말합니다.

코드 흐름을 방해하지 않는 추가 공백이나 명령문이 소스 코드에 추가되면 런타임에 반영해야합니다 (해당되는 경우 컴파일 후).

DISPLAY출력을 시작 하게하는 3 초 이전에 임의의 양의 항목을 삽입 할 수 있으며 , s 이후 의 모든 항목 DISPLAY은 "코드 흐름을 중단"하므로 괜찮습니다.

COBOL TRACE은 소스 라인 번호가 실행될 때 (프로그램의 라인 번호에 액세스 할 수 없음) 단순히 나열한 동사 (문)를 가지고있었습니다. 제한된 사용에도 불구하고 TRACE 구현을 포함 시켰습니다.

   ID Division.
   Program-ID. HIWHERE.
   ENVIRONMENT DIVISION.
   configuration section.
          source-computer. TinkerToy with debugging mode.
   Procedure Division.
   Declaratives.
   Debug-Declaratives Section.
       Use For Debugging on a b
       .
   Debug-Declaratives-Paragraph.
       Display Debug-Line "!"
       .
   End Declaratives
       .
   Main-Program Section.
       DISPLAY "Perform"
       Display "Hello World, from line " no advancing Perform b
       display "GO TO"
       Display "Hello World, from line " no advancing GO TO a
       .
   a.
       dISPLay "Fall through"
       Display "Hello World, from line " no advancing. b.
   The-Last-bit-OF-the-PROGRAM.
       GOBACK
       .

출력은

Perform
Hello World, from line     18!
GO TO
Hello World, from line     20!
Fall through
Hello World, from line     23!

언어 작성의 강력 함과 유연성을 보여주는이 예제에서는 대소 문자를 모두 사용하고 대소 문자를 모두 사용합니다. 처리 될 때 모든 것이 대문자로 "폴딩"되는 것은 중요하지 않습니다.

실행중인 프로그램에서 실행중인 프로그램의 소스 행 번호를 얻는 유일한 표준 COBOL 방법은입니다 DEBUGGING DECLARATIVE. 이내에SECTIONSECTION그러한 선언문 , 엄격하게 단락 내의 단락 내 에서 특수 등록에 액세스 할 수 있습니다 DEBUG-LINE. 여기에는 특정 프로 시저 이름 (단락 또는 SECTION) 으로 제어를 전송 한 동사 (문)의 소스 행 번호가 포함 됩니다.

그래서 PERFORM 또는 GO TO, 또는 "통과"를 사용하면 디버깅 선언의 단락 SECTION이 실행됩니다.

확인하지만 DISPLAY제어 전송을 유발하지는 않습니다.

문제 없어. 에 넣어제어 전송과 동일한 라인 .

"코드 흐름을 방해하지 않는 추가 공백이나 명령문이 소스 코드에 추가되면 런타임에 반영해야합니다 (해당되는 경우 컴파일 후).

따라서 같은 줄에 배치 하지만 제어 전송 앞에DISPLAY 두 부분으로 분할하십시오 ( "이 문맥에서 문자열을 출력하는 명령문의 첫 번째 행 번호를 원합니다"를 기억하십시오) ) 제어 제어를 전송하기 전에 첫 번째 부분을 출력하고 두 번째 부분을 DEBUG-LINE디버깅 절차 내부에서 한 번에 출력합니다.

마지막으로 까다로운 비트는 "fall through"입니다 ( "procedures"는 PERFORMed, 대상이 GO TO될 수 있거나 다음 행으로 간단히 입력 할 수 있음). 이 경우, DISPLAY 프로 시저를 정의하는 행을 정의 앞에 정의하십시오 .

"프로 시저"( ab) 의 이름 이과 ( 와 ) 동일한 소스 라인에 맞도록 크게 단축되었습니다 DISPLAY. 엄밀히 말하면 COBOL procedure-name은 8 열에서 11 열로 시작해야합니다. 그러나 요즘 구문은 훨씬 완화되어 있습니다. 일부 코드와 동일한 행에 프로 시저 이름을 정의 할 수있는 범위까지. 코드에 내장되어 있습니다. 주의를 기울여야하고 가끔 멈추어야합니다.

에서 PROCEDURE DIVISION 표시되는 각 마침표가 필요하지 않습니다, 더 이상이다.

컴파일하기:

cobc -x -g hiwhere.cbl

(linux)를 실행하려면 :

COB_SET_DEBUG=Y ./hiwhere

마지막으로, TRACE의 리턴 (READY / RESET없이).

   ID Division.
   Program-ID. tRacE.
   ENVIRONMENT DIVISION.
   configuration section.
          source-computer. TinkerToy with debugging mode.
   Procedure Division.
   Declaratives.
   Debug-Declaratives Section.
       Use For Debugging on a
       .
   Debug-Declaratives-Paragraph.
       Display Debug-Line
       .
   End Declaratives
       .
   Main-Program Section.
  *    Just append "perform a" to a single-line statement.
       DISPLAY "1" . perform a
       Display "2" . perform a
       display "3" . perform a
  *    Or prepend "perform a." for a multi-line statement, or a
  *    statement which won't "come back". 
       perform a. GOBACK
       .
   a.
       CONTINUE
       .

출력은 다음과 같습니다

1
    17
2
    18
3
    19
    20

여기서 1, 2 및 3은 세 개의 DISPLAY 문에서 출력되며 17, 18, 19 및 20은 "실행 가능"(비 디버깅) 행의 행 번호입니다.


8

자바

예외의 스택 추적 동작을 사용하여 현재 행을 가져옵니다. Printstatement가 여러 줄로 엉망이되거나 클래스 파일이 엉망이되면 작동해야합니다.

public class PrittLnbr
{
    public static void main(String[] args)
    {
        System.out.println("Hello World, from line "+new Error().getStackTrace()[0].toString().split(":")[1]+"!");
    }
}

8

파이썬

import traceback, inspect
frame = inspect.currentframe()
print("Hello World, from line "+traceback.format_stack(frame)[0].split()[3][:-1]+"!")  

6

print 'Hello World, from line '.__LINE__.'!';

13
이것은 또한 유효한 PHP 솔루션입니다.
MrLore

6

자바

public class HelloFrom {
    public static void main(String[] args) {
        System.out.println("Hello World, from line " + Thread.currentThread().getStackTrace()[1].getLineNumber() + "!");
    }
}

기술적으로 내가 한 것과 동일 ( codegolf.stackexchange.com/a/30058/10801 )
masterX244 2016

2
스택 추적을 얻기 위해 새 오류를 만드는 대신 현재 스레드를 사용하는 것을 제외하고는 일종의 정렬입니다. 오류가 없습니다;)
Cineris

6

파이썬

import inspect
print ("Hello world from line %d!" % (inspect.getlineno(inspect.currentframe())))

산출

Hello World from line 2!

1
지금까지 최고의 파이썬!
kirbyfan64sos 2018 년

6

펀지

그냥 재미로 끝냈습니다.

>00g1+:00p"v"\10v  
    v-*45g00p\g <  
#v+1_$10g1vv,,,,<  
^<p000p01+<#>,,,^  
>" enil morf ,oll"v
@.,,,,,,,,,<^,"He"<

조건부 : 코드의 왼쪽 상단은 0 <x <20이고 0 <= y <62 여야합니다. 두 개의 첫 번째 셀은 비어 있어야합니다.

예:

                         v                  

                         0                  
                         0                  
                         0                  
                         p                  
                         0                  
                         1                  
                         0                  
                         p                  
                         >00g1+:00p"v"\10v  
                             v-*45g00p\g <  
                         #v+1_$10g1vv,,,,<  
                         ^<p000p01+<#>,,,^  
                         >" enil morf ,oll"v
                         @.,,,,,,,,,<^,"He"<

출력 :

안녕하세요, 10 행부터


이것이 무엇인지 전혀 모르겠지만 출력 주장을 믿습니다. +1 ;-)
ysap

1
강력한 Befunge의 힘에 의문을 가진 사람들을 위해 여기에서 시도하십시오 : quirkster.com/iano/js/befunge.html
Justin

6

기음

variadic 매크로를 사용하면 임의의 printf 문의 끝에 줄 번호를 자동으로 추가하고 항상 stdout에 인쇄하는 인쇄 기능을 만들 수 있습니다.

test.c :

#include <stdio.h>

#define printfl(format, ...) fprintf(stdout, format " From line %d\n", ##__VA_ARGS__, __LINE__)

int main() {
    printfl("Hello World! I have %d argument(s).", 1);
    return 0;
}

출력 :

% ./test
Hello World! I have 1 argument(s). From line 6

참고 : printfl이 여전히 유효한 variadic 함수임을 보여주기 위해 패턴에서 벗어났습니다. 당신이 경우 정말 출력의 형식에 대한 걱정, 당신은 항상 내가 사용하는 리터럴을 변경할 수 있습니다.


상수 형식 문자열을 사용하는 경우에만 작동합니다. 형식 문자열에 다른 식을 전달하면 실패합니다.
Snowbody

5

세게 때리다

#
# some comments to fill some lines...
#
echo "Hello World, from line $LINENO!"

산출

Hello World, from line 4!

@professorfish ... 내 답변에 대한 내 스타일의 문제점은 무엇입니까? 적어도 내 작품을 조작하는 이유를 설명해야합니다 ...

2
코드를 변경 했습니까? 내가했다면 미안해 난 그냥 비 bash 사용자가 소스 코드와 출력이 무엇인지 말할 수

1
그리고 나와 다른 사람은 왜 그 이유를 언급하지 않고 자신의 물건이 바뀌는 것을 보는 것을 좋아합니까? 이상한 곳 ...

3
기본적으로 형식이 수정되었습니다. AFAIK에는 아무런 문제가 없습니다

규칙에서 허용하더라도 LINE 과 같은 정의 된 변수를 사용 하지 않는 것이 좋습니다.
vaxquis

5

void main ()
{
    import std.stdio;
    writefln("Hello World, from line %d", __LINE__);
}

규칙에서 허용하더라도 LINE 과 같은 정의 된 변수를 사용 하지 않는 것이 좋습니다.
vaxquis

5

C 또는 C ++ 및 AWK

lineno.c :

// code or comments
// ....
#error Hello World, from line
// other code or comments

용법:

gcc lineno.c 2>&1 | awk '{ split($0,a,":"); ; printf("%s %s!\n", gensub(".*#error ","",1), a[2]); exit; }'

산출:

안녕하세요, 3 행부터

노트:

  • 사용자가 작성한 코드는 파일을 검색하지 않습니다.
  • g ++는 c ++ 파일에서 작동합니다.

4

루비에서 지루한 종류 :

puts "Hello World, from line #{__LINE__}!"

이건 속임수가 아니지?


아니, 이건 속이지 않아! 이 문제는 분명히있을 것 많은 내가 게시하는 이유 (채점 기준의 포함이 중요한 이유 지금 참조) :)이었다, 그러나 일부 언어에서 쉽고 다른 사람 더 어려워
혁신

규칙에서 허용하더라도 LINE 과 같은 정의 된 변수를 사용 하지 않는 것이 좋습니다.
vaxquis

1
@vaxquis 네, 그 대답 은 이 답변 후에 추가 되었습니다 .
Ajedi32

4

자바 스크립트

스택 추적을 사용하는 한 줄.

(function (o) { console.log("Hello World, from line " + (Error.captureStackTrace(o) || o.stack.match(/\d+/)[0] - !!__commandLineAPI) + "!"); })({});

3

코브라

class Program
    def main
        print 'Hello World, from line [System.Diagnostics.StackFrame(true).getFileLineNumber]!'

3

루비

File.write "hello.rb", "x=2\n"+"x+=1\n"*rand(rand(100))+'puts "Hello World, from line #{x}!"'
system "ruby hello.rb"
File.delete "hello.rb"

3

PowerShell

저렴한 이동

Function LemmeGetDatError() {
    "Too busy chuggin along"
    "Then all of a sudden, I meet a new programmer"
    "And he's all like"
    Write-Output "$(Try {"Hello World from"; Throw "error" } Catch {$_.ScriptStackTrace.Split(":")[1]})"
}

LemmeGetDatError

3

파워 쉘

$l=(Get-PSCallStack | ForEach{$_.Location})[0].split(' ')[-1]; "Hello World, from line $l!"

과:

try{ I AM ERROR. } catch { $l=$error[0].InvocationInfo.ScriptLineNumber; "Hello World, from line $l!" }

둘 다 다음과 같이 작동합니다.

PS C:\MyFolder> .\helloworld.ps1
Hello World, from line 1!

+1이지만 Write-Hoststdout에 쓰지 않습니다. 단순히 문자열을 전달하면 stdout으로 전송됩니다. 예"Hello World, from line {0}!" -f (gcs| %{$_.ScriptLineNumber})[0]
Rynant

@Rynant 좋은 지적! 나는 그것을 고려하기 위해 대답을 업데이트 할 것입니다 ...
DarkAjax

3

파이썬

import traceback

print 'Hello World, from line %i!' % traceback.extract_stack()[0][1]

짧고 달다.


3

또 다른 Perl 하나 :

use warnings;

$SIG{__WARN__} = sub { ($line = shift) =~ s/\D//g; };

$x=$x+1; print "Hello World, form line $line!\n";
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.