CNode

我也出个题,用js写个打印自己源码的程序

Zzealoth发布于12 年前最后回复12 年前25 回复6974 浏览0 收藏

如题,如果你程序名是a.js 则在命令行中运行 node a.js 及 cat a.js (linux, osx) 或 type a.js (windows, dos) 及 cat a.js | node node a.js | node | node | node ... | node , 任意多的 |node 结果都一样 输出内容一样。非空短者胜

其实不难,不过瘾,可以用c试试

查看回复

回复 (25)

C
coordcn#1·12 年前

console.log(require('fs').readFileSync('test.js').toString()); 不会是这个东西吧。

L
leizongmin#2·12 年前
引用 coordcnconsole.log(require('fs').readFileSync('test.js').toString()); 不会是这个东西吧。

console.log(require('fs').readFileSync(__filename).toString()); 不过这样无法在REPL上运行

Z
zealoth#3·12 年前

都不对啊,三个条件 node a.js cat a.js cat a.js | node 输出完全一样

C
coordcn#4·12 年前

console.log()会自动加'\n',换成process.stdout.write就没有多余的一行,就完全一样了。 这个肯定不是最短的。楼主速度放出答案吧。^_^

F
fundon#5·12 年前

print-self.js

require('fs').createReadStream('print-self.js').pipe(process.stdout)
Z
zealoth#6·12 年前

读自己文件内容,这方法就不要再想了,不会是最短的, 而且受制于文件名,文件名一变,结果就不对了

Z
zealoth#7·12 年前

公布答案: function a(){console.log(a+";a()")};a()

文件名任意, 大家想偏了,用c做过这题的人,就没问题。

F
fundon#8·12 年前

a.js 内容如下

W
waksana#9·12 年前
引用 fundona.js 内容如下

终结此问题

A
alsotang#10·12 年前
引用 fundona.js 内容如下

赢了。

C
coordcn#11·12 年前

C难,js不难,注意去掉node.js的function(exports, require, module, __filename, __dirname){ }就行了。

Z
zealoth#12·12 年前

出乎意料,忘了加非空的限制了

C
coordcn#13·12 年前
引用 zealoth出乎意料,忘了加非空的限制了

我去,我刷了半天,我以为我浏览器出问题了,现在明白了。 楼主你觉得我解出来了么?

Z
zealoth#14·12 年前
引用 zealoth出乎意料,忘了加非空的限制了

@coordcn 没看明白,能写出来吗?

C
coordcn#15·12 年前
引用 zealoth出乎意料,忘了加非空的限制了

@zealoth

var bar;
var test;

(function(){
  console.log(arguments.callee.caller.toString().slice(61, -1));
})();
Z
zealoth#16·12 年前
引用 zealoth出乎意料,忘了加非空的限制了

@coordcn 太长了,我的还要短

C
coordcn#17·12 年前
引用 zealoth出乎意料,忘了加非空的限制了

@zealoth 原理一样么?

C
coordcn#18·12 年前
引用 zealoth出乎意料,忘了加非空的限制了

@zealoth

console.log(arguments.callee.toString().slice(61, -1));

node.js自己添加的函数也是要利用起来的,根本没必要自己再包装一个。

Z
zealoth#19·12 年前
C
coordcn#20·12 年前
引用 zealoth出乎意料,忘了加非空的限制了

@zealoth 那上面的已经是我能做到的最短了(不算console.log总共20个字好像),坐等答案。

Z
zealoth#21·12 年前
引用 zealoth出乎意料,忘了加非空的限制了

@coordcn 我试了,你的这个没正常的结果,另外长度是56字节,还是长,怎么是20个? 如果是(function(){console.log(arguments.callee.caller.toString().slice(61, -1));})() 长度79,输出时还多了3个回车,与原文不符

C
coordcn#22·12 年前
引用 zealoth出乎意料,忘了加非空的限制了

@zealoth 我试过了啊,数错了,应该是20几双。 console.log(arguments.callee.toString().slice(61, -1)); 按上面的,没注意回车啊,我再改进下。

Z
zealoth#23·12 年前

20几双还是长 cat a.js | node 这样就没结果就不对了,是吗?

参与回复
登录后即可参与回复。登录