如何让我的ruby脚本输出运行它的ruby版本? 最佳答案 RUBY_VERSION常量包含ruby解释器的版本号,RUBY_PATCHLEVEL包含补丁级别,因此:putsRUBY_VERSION输出例如2.2.3,同时:putsRUBY_PATCHLEVEL输出例如173。它可以像这样一起使用:ruby-e'print"ruby#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}"'输出例如ruby2.2.3p173 关于ruby-有一个ruby脚本输
所以当我从命令行调用我的脚本时,我希望它接受一个int并使用该值做一些事情:rubyscript.rbputsARGV[0],etc...但是,每当加载或需要脚本而不是从命令行调用脚本时,我想完全跳过这部分代码。如何检测脚本是通过命令行调用还是刚刚加载?谢谢! 最佳答案 通常将它放在脚本的底部:if__FILE__==$0#thiswillonlyrunifthescriptwasthemain,notload'dorrequire'dend因为我喜欢在文件顶部看到主要操作,所以我通常将defrun!作为文件中的第一个方法,然后以以
我想要一个类和一些属性,您可以在初始化期间设置这些属性或使用其默认值。classFruitattr_accessor:color,:typedefinitialize(color,type)@color=color||='green'@type=type||='pear'endendapple=Fruit.new(red,apple) 最佳答案 解决此问题的典型方法是使用具有默认值的散列。如果散列值是方法的最后一个参数,Ruby有一个很好的传递散列值的语法。classFruitattr_accessor:color,:typedef
我刚刚注意到在Ruby的维基百科页面中,这种语言被定义为解释型语言。我知道我的背景可能缺少一些东西。我一直知道不需要编译器的解释语言和编译语言(需要在程序执行之前编译)之间的区别,但是脚本语言的特征是什么?Ruby是否可以定义为脚本语言?谢谢并原谅我的停电 最佳答案 事情不是非黑即白的。至少,它们也有大和小、响和静、蓝和橙、灰和灰、长和短、对和错等等。解释/编译只是对语言进行分类的一种方式,它完全独立于(在无数其他事物中)您是否将同一种语言称为“脚本语言”。最重要的是,它也是一个错误的分类:解释/编译取决于语言实现,而不是语言(这不
我不确定这是否有意义,但我在想是否有办法在使用ruby中的system方法运行时抑制命令显示的输出?我的意思是它应该只输出true或false到STDOUT而不是命令的输出。我认为只有当命令可以静默运行而不是从system方法运行时才能完成。有人可以提供更多见解吗? 最佳答案 如果您想利用Kernel.system的可变参数形式,它可以避免shell的许多引用问题,您可以使用相同的optionswhichKernel.spawnaccepts.TL;DR-使用:out=>File::NULL使Kernel.system的输出静音
我对Ruby有点陌生,仍在努力理解一些语言设计原则。如果我做对了,Ruby中的lambda表达式调用必须使用方括号,而“常规”函数调用则使用“常规”/圆括号。语法不同是不是有什么特殊原因?或者,换句话说,(为什么)调用者应该知道他们是调用函数还是应用lambda表达式? 最佳答案 常规的Ruby方法调用使用()而不是用于block的花括号。如果您不喜欢[]来调用lambda,您始终可以使用call方法。例子:>>by_two=lambda{|x|x*2}#=>#>>by_two[5]#=>10>>by_two.call(5)#=>1
classAdefinitialize@x=do_somethingenddefdo_something42endend如何在调用原始实现之前在rspec中stubdo_something(从而将42分配给@x)?当然,在不改变实现的情况下。 最佳答案 Here'sthecommitwhichaddsthefeaturetorspec-这是在2008年5月25日。有了这个你可以做A.any_instance.stub(do_something:23)但是,rspec的最新gem版本(1.1.11,2008年10月)没有这个补丁。Th
我正在尝试使用带有cron的rbenv运行Ruby脚本。我知道我需要加载rbenv才能加载正确的Ruby版本。我试过这样的选项:*/10****/bin/bash-c'source$HOME/.bashrc;cd/data/app;ruby-v'>>/tmp/logfile.txt2>&1但由于session不是交互式的,我没有正确的Ruby版本。我找到了这样的例子:15141**exportBASH_ENV=/path/to/environment&&/full/path/to/bash-c'/full/path/to/rvm_script.rb'它也没有用。然后我写了一个加载器,它
给定任何对象,我可以调用#public_methods并查看它将响应的所有方法。但是,我发现有时获取所有未继承的公共(public)方法的快速列表会很方便,即真正属于此类的内容。我在“EasywaytolistpublicmethodsforaRubyobject”中发现如果我使用:(Foo.public_methods-Object.public_methods).sort我可以过滤掉很多基本的Ruby内容。我希望能够过滤沿链向上一直继承的所有内容。如果我知道父类,我可以使用它进行过滤,但我想提出一个通用命令,该命令可以为任何对象返回一组未继承的公共(public)方法。
在ruby中,是否可以指定使用与运行原始脚本相同的ruby解释器来调用另一个ruby脚本?例如,如果a.rb运行b.rb几次,是否可以替换system("ruby","b.rb","foo","bar")用类似的东西run_ruby("b.rb","foo","bar")所以如果你使用ruby1.9.1a.rb在原件上,ruby1.9.1将在b.rb上使用,但如果您只使用rubya.rb在原件上,ruby会用在b.rb上吗?我不想使用shebang,因为我希望它能够在不同的计算机上运行,其中一些没有/usr/bin/env.编辑:我不是说load或require等等,但