如题,如果你程序名是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试试
a.js 内容如下
终结此问题
赢了。
C难,js不难,注意去掉node.js的function(exports, require, module, __filename, __dirname){ }就行了。
出乎意料,忘了加非空的限制了
我去,我刷了半天,我以为我浏览器出问题了,现在明白了。 楼主你觉得我解出来了么?
@coordcn 没看明白,能写出来吗?
var bar;
var test;
(function(){
console.log(arguments.callee.caller.toString().slice(61, -1));
})();
@coordcn 太长了,我的还要短
@zealoth 原理一样么?
console.log(arguments.callee.toString().slice(61, -1));
node.js自己添加的函数也是要利用起来的,根本没必要自己再包装一个。
@coordcn 不一样
@zealoth 那上面的已经是我能做到的最短了(不算console.log总共20个字好像),坐等答案。
@coordcn 我试了,你的这个没正常的结果,另外长度是56字节,还是长,怎么是20个? 如果是(function(){console.log(arguments.callee.caller.toString().slice(61, -1));})() 长度79,输出时还多了3个回车,与原文不符
@zealoth 我试过了啊,数错了,应该是20几双。 console.log(arguments.callee.toString().slice(61, -1)); 按上面的,没注意回车啊,我再改进下。
20几双还是长 cat a.js | node 这样就没结果就不对了,是吗?
我用windos,有类似命令么?
@coordcn type a.js | node
console.log(require(‘fs’).readFileSync(‘test.js’).toString()); 不会是这个东西吧。
console.log(require('fs').readFileSync(__filename).toString());
不过这样无法在REPL上运行
都不对啊,三个条件 node a.js cat a.js cat a.js | node 输出完全一样
console.log()会自动加’\n’,换成process.stdout.write就没有多余的一行,就完全一样了。 这个肯定不是最短的。楼主速度放出答案吧。^_^
print-self.js
require('fs').createReadStream('print-self.js').pipe(process.stdout)
读自己文件内容,这方法就不要再想了,不会是最短的, 而且受制于文件名,文件名一变,结果就不对了
公布答案: function a(){console.log(a+";a()")};a()
文件名任意, 大家想偏了,用c做过这题的人,就没问题。