Print / output deyiminin satır numarasını kendiniz yazdırmak için bir kod parçası yazın (“Hello World, X satırından!” Şeklinde)


25

Meydan okuma

Kaynak koduna satır numarasını Hello World, from line X!nerede çıkaran Xgerçek print cümlesinin kendisini çıkaran bir program yazın .

Kurallar

  • Bu bağlamda, bizim istediğimiz ilk dizge çıktılar ifadenin satır numarasını için görüntülenecekstdout
  • Sen gerektiğini bir dize olarak kaynak kodu ile arama basitçe önlemek satır numarasını bulmak için (dosya veya Quine ya)
  • Varsa ek boşluk veya tablolar (kod akışını kesintiye uğratmaz) kaynak koduna eklenir, bu edilmelidir çalışma sırasında yansıyan (varsa derleme sonra)

öneriler

Dilin sağladığı varsa, olabilir bu hedefi gerçekleştirmek için yığın / izleri istisnaları kullanın. Farklı sistemler / uygulamalar arasında taşınabilir olan kodu kullanmak için elinizden gelenin en iyisini yapın , ancak bunun bir gereklilik olmadığını unutmayın . __LINE__Kuralların izin vermesine rağmen, gibi tanımlanmış değişkenlerin kullanılması tavsiye edilmez.

Kazanan

  • Bu, popülerlik yarışmasıdır (10 Haziran 2014 tarihinde sona erdi), topluluk tarafından en yüksek oyu alan cevabın o andaki oylara göre kazanan ilan edileceği

  • Oy verirken, lütfen birinin cevabının yaratıcılığını, ne kadar ayrıntılı veya ilginç olduğunu düşünün . ve kullanılan programlama dilinin zorlukları / kısıtlamaları


"İlk satır numarası" ile ne demek istiyorsunuz? İfade birden fazla satırı kapsıyorsa ne olması gerektiğinden mi bahsediyorsunuz?
user2357112, 01 Haziran’da Monica

@ user2357112 evet, herhangi birinin bir milti-line ifadesi kullanması gerekirse herhangi bir belirsizliği çözmek için.
Çıkış

Başlık çok açık, ama belki biraz uzun.
primo

1
Bunun cevabı çok sıkıcı çünkü bu çok kötü bir soru. Asker varlığının bilmiyordum gibi olan LINE . Aslında, özellikle aşağı oy kullanmak için kaydoldum, bunun çok kötü olduğunu düşündüm.
dave

1
@Markasoftware eğer önüne bir satır eklenmişse, çıktı bunu yansıtacak şekilde değişmezdi.
primo

Yanıtlar:


48

Sinclair Basic

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

Merhaba dünya, 10. hattan!

Bu PEEK, geçerli satır numarasını kaydeden adrese yazarak herhangi bir satır için çalışacaktır , bu nedenle aşağıdakiler de çalışacaktır:

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

Merhaba dünya, 341 hattından!


Aynı şekilde, Timex / Sinclair BASIC!
Gabe

Bu dili biliyormuş gibi yapmıyorum, ancak işaretleri noktalı virgüllerle STR$değiştirirseniz, dışarı çıkamaz +mısınız?
Bay Lister,

@ Bayrister Evet, bu kesinlikle işe yarayacak, fakat ben her zaman +alışkanlıktan kullanıyorum.
kitcar2000

40

TEMEL

Bence bu istenen her şeyi yapar:

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). Amaç orada. Ayrıca, bu kaynağın ilk satırı, 10'uncu değil.
Bill Woodger

30
Kaynak koddaki ilk satır olabilir, ancak yine de satır 10 .
squeamish ossifrage

13
Bunun artık komik olmayan kategoriye girdiğine inanıyorum . Kelimenin tam anlamıyla yerine getirmesine rağmen, gerçekten yaratıcı değildir ve ilgi çekici değildir. Bu neden bu kadar çok artıya sahip? (Oy vermedim)
Tim S.

18
Bu harika bir cevap, çünkü BASIC dilinin başka dillerde (özellikle modern dillerde) bulunmayan bir yönünün aptalca ama özel bir avantajı var. En popüler olmayabilir (zaman söyleyecektir) ancak __LINE__ gibi bir sabit kullanmaktan veya mevcut yığın çerçevesinden hata ayıklama bilgisi almaktan (şu anda diğer cevapların çoğunda olduğu gibi) bir hata kullanmaktan daha az ilginç olduğunu anlayamıyorum.
Nick

2
Zekice, ama bundan daha başka hiçbir şeyle sonuçlanmadıysa hayal kırıklığına uğrarım.
agweber

35

Java

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

1
Tercih ederimThread.currentThread().getStackTrace()
Cruncher

3
Thread.getStackTrace () çağrıları (yeni İstisna ()). GetStackTrace () geçerli iş parçacığı üzerinde çağrılırsa, aynı şeydir
DHall

1
garip .... 2x aynı cevap ve 2 farklı artış miktarı ... (RNG kaynağı olarak kullanılabilir ...) (burada aynı: codegolf.stackexchange.com/a/30058/10801 )
masterX244

@ masterX244, bu iki cevap tam olarak aynı değildir ; bu getLineNumber(), yığın izlemesindeki yöntemi kullanır toString(), buna bağladığınız cevap satır numarasını bulmak için üzerinde kullanır .
Atılım

9
@ masterX244, bu cevabın 2 saat önce göründüğünü de belirtmekte fayda var. İkinci kez bir cevap gördüğümde, ilki kadar ilginç değil.
primo

30

Perl

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


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

Kullanmak kadar kısa değil __LINE__, ama belki de daha ilginç.

warnBir hata ayıklama aracı, sorunları bir açıklama olduğunu STDERRhangi dosya içinde, ve uyarı ... verildiği hangi hat üzerinde gösteren sürece STDERR daha önceden kapatılmış veya başka erişilemez olmuştur ki bu durumda uyarı en son açılan dosyaya verilir, tanıtıcı - bu belgelenmemiş davranış. Bir özellik mi, böcek mi olarak sınıflandırılacağından emin değilim.

Burada STDERRkapalı ve yeni bir dosya tanıtıcısı FOOBARaçılarak tanımlandı ve değişkene yönlendirildi $_. Bu daha sonra print deyiminde gömülü olan uyarının satır numarasını almak için ayrıştırılır.


3
Evet, kesinlikle daha ilginç :)
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";
}

canlı örnek


2
Bu ... büyücülük
Paladine

1
Bunun nasıl çalıştığını görmek ... çok uzun zaman aldı. Soo birçok kırmızı ringa balığı! Lezzetli.
14'te

1
Peki nasıl çalışıyor?
0x499602D2, 27.05.2016

16

Lua

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

16

C #

C # 5.0's [CallerLineNumber]hile yapar:

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();
        }
    }
}

Çıktı

Hello World, from line X!

Romen rakamlarını kullanmak için herhangi bir özel sebep var mı?
Cole Johnson,

4
Baskı satırı 10 olduğunda, soru tam anlamıyla yorumlanır. XRomen rakamlarında 10.
Zorlu

Romen rakamları hoş bir dokunuş!
NPSF3000

15

C

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

LINE gibi tanımlanmış değişkenlerin kullanılması , kuralların izin vermesine rağmen yasaktır.
vaxquis

@vaxquis, evet ama cevabım soruyu düzenleyen
predates

IMO hala berbat ve çok açık bir çözüm. İnsanların neden uzaktan, komik ve merak uyandırıcı bir şey yapmaya çalışmak yerine, bu çözümün her türlü varyasyonunu dünyanın tüm dillerinde (PHP, D, Perl dahil) yayınladıklarını merak ediyorum.
vaxquis

14

piton

Örnek (10 satır, 213 karakter):

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

Burada çevrimiçi deneyin . Akış olmayan değiştirme kodu ve boşluk eklenebilir ve program güncellenmiş satır sayısını görüntüler ve aynı şekilde bu kod pasajı da mevcut bir programın herhangi bir yerinde kullanılabilir. Beklenen çıktı:

Hello World, from line 6!

Başka bir örnek (burada çevrimiçi deneyin) kod / boşluk eklendiğinde çalıştığını göstermek için. Beklenen çıktı:

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

12

JavaScript

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) + ' !')

Not: krom dev konsolu içinden değerlendirilen ifadeler bir cümleyle sarılır with. Bu yüzden, eğer öyleyse çizgiyi birer düşürmeliyiz.


2
dat yığını , hehe. Firefox'ta çalışarak onaylanmıştır.
Atılım

1
@Breakth :) Evet, tarayıcılar arası çalışır (ancak en son Chrome, FF, IE olsa da test edilmiştir). Chrome'un her bir ifadesini bir withmaddeye sardığı için konsolun içinden değerlendirildiğinde özel bir işlem yapması gerekiyor .
C5H8NNaO4

2
İlginç ama belirsiz kullanıcı adı. Monosodyum glutamat belki de? (BTW, DNA ve amino asitler hakkında bir soru yapmayı düşünüyorum, glutamik asidi bir tane.)
Level River St

@steveverrill google göre, haklısın !
kitcar2000

@ kitcar2000 Muhtemelen. Ancak bu formüle sahip daha az bilinen başka bileşikler de vardır: Örneğin, sodyum metilaspartat veya nitropentanoat.
Seviye River St

11

Python 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

Merhaba dünya, 8. hattan!

Bu kendi kendine okuma kodu, kendi kendine başvuran bir karma içerir. (Başlangıç boşluk ve boşluk arka olmadan) satırının SHA 256 toplamı ile başlar cc46f7... . printÇizgiyi karıştığında, karmanın aradığı sihirli değerle eşleştiğini bulur.


line_num = 'ı -1' e ayarlayıp, yazının ilmek dışına çıkmasını ve büyü karmaşasından kurtulmasını sağlayamaz mıydın?
dave

1
@dave seni takip ettiğimden emin değilim. Sihirli karma, bu çözümü zeki yapan şeydir.
Tim S.

Kurallarımın gerçek anlamıyla yorumlanması için +1 :) Çok akıllıca.
Atılım

5
@Stefan Bu site olsa da, en kötü uygulamalar hakkında. ;)
Tim S.

1
@sehe Büyük olasılıkla, bu boşluklarla ilgili oldu. Yaptığımda dosyanın sonunda yeni bir hattım yoktu. Karmamadan önce çizginin sonundaki boşlukları şeritlemek için bir çizgi ekledim. Şimdi daha tutarlı çalışması gerekir. (ayrıca boşlukları sekmelere dönüştürmediğinizden emin olun) Size canlı bir sürüm göstermek için onu ideone'e yüklemeyi denedim, ancak orada kendi dosyasını okuyamıyor.
Tim S.

9

GNU COBOL

Yapamayacağını söylediler. Aslında, yapılamayacağını söyleyen bendim. Şimdi bitti ve eski bir dil özelliği uygulanan yöntemi kullanarak yeniden uygulandı.

Soru şu şekildedir:

Eğer kaynak koda ek boşluklar veya ifadeler (kodun akışını kesmeyen) eklenirse, çalışma zamanında (varsa derlendikten sonra) yansıtılmalıdır.

DISPLAYÇıktının başlamasına neden olan üç saniyeden önce herhangi bir miktarda malzeme eklenebilir ve s'den sonraki her şey DISPLAY"kodun akışını keser", bu yüzden sorun değil.

COBOL TRACE, basitçe çalıştırılan kaynak satır numaralarını listeleyen bir fiil (deyim) kullanıyordu (programdaki satır numarasına erişim yok). Sınırlı kullanım olmasına rağmen, bir TRACE uygulaması ekledim.

   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
       .

Çıktı

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

Dili yazma gücünün ve esnekliğinin bir sunumu olarak, bu örnekte aynı anda karışık, tamamen küçük harf ve tamamen büyük harf kullanılır. İşlendiği gibi, her şeyin UPPERCASE'e "katlanmış" olması önemli değildir.

Çalışan programdaki kaynak satır numarasına, çalışan programdan ulaşan tek standart COBOL yolu a DEBUGGING DECLARATIVE. Bir içinde SECTION, kesinlikle bir paragraf içinde SECTION, böyle bir bildirimin özel siciline erişiminiz vardır DEBUG-LINE. Bu, kontrolün belirli bir prosedür ismine (paragraf veya SECTION) aktarılmasına neden olan fiilin (deyim) kaynak satır numarasını içerir .

Yani, ile PERFORM, ya GO TO, veya ayıklama bildirim deyimleri de paragrafın "aracılığıyla düşme" SECTIONyürütülür.

Tamam, ancak DISPLAYkontrol transferine neden olmaz.

Sorun değil. Kontrol transferiyle aynı satıra koyun .

Sorun, "kodun akışını kesmeyen herhangi bir ek boşluk veya ifadeler kaynak koduna eklendiğinde, çalışma zamanında (varsa derlendikten sonra) yansıtılmalıdır."

Dolayısıyla, aynı satıra koyun, ancak bir kontrol aktarımının önüne , içeriğini DISPLAYiki parçaya bölün (hatırlayın, "Bu bağlamda, dizgeyi çıkaran ifadenin ilk satır numarasının gösterilmesini istiyoruz"). ve kontrol transferinden önce birinci kısmı ve ikinci kısmı DEBUG-LINE, bir kez hata ayıklama prosedürünün içinden çıkarır.

Son zor bit, "düşmek" içindir ("prosedürler" belirtilebilir PERFORM, bir hedef GO TOolabilir veya bir sonraki satırda girilerek girilebilir). Bu durumda, DISPLAY prosedürü tanımlayan çizgiyi, ancak tanımın önüne koyun .

"Prosedürlerin" ( ave b) isimleri , ile aynı kaynak hattına uymalarını sağlamak için ciddi şekilde kısaltılmıştır DISPLAY. Kesinlikle bir COBOL prosedür adı, sekizinci sütundan 11. sütuna kadar bir yerden başlamalıdır. Ancak, sözdizimi bu günlerde bu konuda çok daha rahat. Bazı kodla aynı satırda bir işlem adı tanımlayabildiğim kadarıyla. Hatta koda gömülü bile. Bakım ve arada bir tam durma gerekir.

Gösterilen PROCEDURE DIVISIONher tam durak gerekli ve daha fazla değildir.

Derlemek için:

cobc -x -g hiwhere.cbl

Yürütmek için (linux):

COB_SET_DEBUG=Y ./hiwhere

Son olarak, İZLEME (HAZIR / SIFIRLA olmadan) geri dönüşü.

   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
       .

Çıktı:

1
    17
2
    18
3
    19
    20

1, 2 ve 3'ün üç DISPLAY deyiminden çıktıları ve 17, 18, 19 ve 20 "çalıştırılabilir" (hata ayıklamayan) satırların satır numaralarıdır.


8

Java

İstisna'nın yığın izi davranışını kullanarak geçerli satırı elde etmek. Printstatement birden fazla satıra alınmadığı veya classfile tarafından yönetilmediği sürece çalışması gerekir.

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

8

piton

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

6

Perl

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

13
Bu aynı zamanda geçerli bir PHP çözümüdür.
MrLore

6

Java

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


2
Yığın izlemesini almak için yeni bir Hata oluşturmak yerine geçerli İş parçacığını kullanmak dışında sıralama. Hata yok;)
Cineris

6

piton

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

Çıktı

Hello World from line 2!

1
Şimdiye kadarki en iyi Python!
kirbyfan64sos

6

Befunge

Sadece eğlence için yaptım.

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

Koşullu: kodun sol üst köşesi 0 <x <20 ve 0 <= y <62 olmalıdır; ve ilk iki hücrenin boş olması gerekir.

örnek:

                         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"<

Çıktısı olur:

Merhaba, 10. satırdan


Bunun ne olduğu hakkında hiçbir fikrim yok, ancak çıktınızın iddiasına inanıyorum, yani +1 ;-)
ysap

1
Güçlü Befunge'nin gücünü sorgulayanlar için burada deneyin: quirkster.com/iano/js/befunge.html
Justin

6

C

Değişken bir makro kullanarak, satır numarasını rasgele bir printf ifadesinin sonuna otomatik olarak ekleyen ve her zaman stdout'a basan bir yazdırma işlevi yapabiliriz.

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;
}

çıktılar:

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

Not: Ben printfl hala geçerli bir değişken işlevi olduğunu göstermek için desen sapma; eğer gerçekten çıkışın biçimi hakkında bakım, her zaman kullandığım değişmezleri değiştirebilir.


Bu, yalnızca bir sabit biçim dizesi kullanıyorsanız çalışır. Format dizgisi için başka bir ifadeye geçerseniz başarısız olur.
Snowbody

5

darbe

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

Çıktı

Hello World, from line 4!

@professorfish ... MY cevabını göstermek için MY stilinde yanlış olan ne? En azından sanat

2
kodu değiştirdim mi? eğer yaptıysam özür dilerim. Bash olmayan kullanıcıların kaynak kodunun ne olduğunu ve çıktıların ne olduğunu

1
Ve benden başka evryone, nedenini yorumlamadan eşyalarının değiştiğini görmeyi seviyor. Garip bir yer ...

3
Temelde bir biçimlendirme düzeltmesi yapıldı. Bu AFAIK ile ilgili gerçekten yanlış olan hiçbir şey yok

LINE gibi tanımlanmış değişkenlerin kullanılması , kuralların izin vermesine rağmen yasaktır.
vaxquis

5

D

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

LINE gibi tanımlanmış değişkenlerin kullanılması , kuralların izin vermesine rağmen yasaktır.
vaxquis

5

C veya C ++ ve AWK

lineno.c:

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

Kullanımı:

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

Çıktı:

Merhaba, Dünya, 3. satırdan

Notlar:

  • Hiçbir kullanıcı yazılı kod dosyayı aramaz.
  • g ++ c ++ dosyasında çalışacaktır.

4

Ruby'de sıkıcı bir şey:

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

Bu aldatma değil, değil mi?


Hayır, bu aldatma değil! Bu meydan okuma açıkça bazı dillerde çok daha kolay olacak ve bazılarında daha zor olacak, ancak bu yüzden onu gönderdim :) (şimdi bir puanlama kriterinin dahil edilmesinin neden bu kadar önemli olduğunu görüyorum)
Atılım

LINE gibi tanımlanmış değişkenlerin kullanılması , kuralların izin vermesine rağmen yasaktır.
vaxquis

1
@ vaxquis Evet, bu ifade bu cevaptan sonra eklendi .
Ajedi32

4

JavaScript

Yığın izlemeyi kullanan bir satır.

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

3

kobra

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

3

Yakut

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

Güç kalkanı

Ucuz Taşı

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

Güç kalkanı

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

Ve:

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

Her ikisi de böyle çalışır:

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

+1, ancak Write-Hoststdout'a yazmıyor. Sadece dizgeyi geçerek stdout'a gönderilir. Eg"Hello World, from line {0}!" -f (gcs| %{$_.ScriptLineNumber})[0]
Rynant

@Rynant İyi nokta! Bunu dikkate almak için cevaplarımı güncelleyeceğim ...
DarkAjax

3

piton

import traceback

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

Kısa ve güzel.


3

Perl

Başka bir Perl:

use warnings;

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

$x=$x+1; print "Hello World, form line $line!\n";
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.