Tag: ruby

在设置环境变量时从ruby中取出shell

我需要在为它设置环境变量的同时对一个进程进行shell。 我试过这个单行: system “RBENV_VERSION=system ruby extconf.rb” 此语法适用于shell脚本,但不适用于ruby。 ( 更新:事实certificate这个语法毕竟是来自ruby,但由于我的特殊用例,我没有看到它的效果。) 所以我这样做: rbenv_version = ENV[‘RBENV_VERSION’] ENV[‘RBENV_VERSION’] = ‘system’ begin system “ruby extconf.rb” ensure ENV[‘RBENV_VERSION’] = rbenv_version end 我被迫做了这么长的表达,因为如果它已经有了值,我不想永久地覆盖环境变量。 想到什么更短的东西?

在ruby中创建惯用对象

在ruby中,我经常发现自己编写以下内容: class Foo def initialize(bar, baz) @bar = bar @baz = baz end <> end 甚至 class Foo attr_accessor :bar, :baz def initialize(bar, baz) @bar = bar @baz = baz end <> end 我总是希望尽可能地减少样板 – 所以是否有更惯用的方式在ruby中创建对象?

在Ruby中检测没有getc / get的按键(非阻塞)

我有一个简单的任务,需要等待文件系统上的某些东西改变(它本质上是原型的编译器)。 因此,在检查更改的文件后,我有一个简单的无限循环,睡眠时间为5秒。 loop do # if files changed # process files # and puts result sleep 5 end 而不是Ctrl+C致敬,我宁愿能够测试并查看是否按下了一个键,而没有阻止循环。 基本上我只需要一种方法来判断是否有传入的按键,然后一种方法来获取它们直到满足Q,然后退出程序。 我想要的是: def wait_for_Q key_is_pressed && get_ch == ‘Q’ end loop do # if files changed # process files # and puts result wait_for_Q or sleep 5 end 或者,这是Ruby不做的事情(好)?

Emacs在运行编译命令时忽略了我的路径

我正在尝试使用我的Mac OS X系统上的特定ruby版本运行编译命令(rake cucumber),我使用rvm当前在终端中执行此操作。 我的〜/ .MacOSX / environment.plist中有正确的路径,但是emacs坚持在这条路径上加前一步,因此无用。 我也尝试过: (when (equal system-type ‘darwin) (setenv “PATH” (concat “/Users/fearoffish/.rvm/bin:/Users/fearoffish/.rvm/rubies/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249%global/bin:/Users/fearoffish/.rvm/bin”)) (push “/Users/fearoffish/.rvm/bin” exec-path) (push “/Users/fearoffish/.rvm/rubies/ruby-1.8.7-p249/bin” exec-path) (push “/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249/bin” exec-path) (push “/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249%global/bin” exec-path) (push “/Users/fearoffish/.rvm/bin” exec-path)) 这是emacs初学者的绝望尝试,以获得我想要的东西。 它仍然在它前面,所以我的道路最终是: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/fearoffish/.rvm/bin:/Users/fearoffish/.rvm/rubies/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249%global/bin 我不希望/ usr / bin和其他人在前面,我希望我的路径首先和emacs前置路径到最后,我认为这将解决我的问题。 我通过简单地打开Aquamacs并运行meta-x compile然后echo $PATH 。 有任何想法吗?

立即从控制台获取单个字符

一旦提供了STDIN,是否可以从STDIN中获取每个char(无需等待返回键)?

类/对象悖论混淆

在书中The Well Grounded Rubyist( 摘录 )中,David Black谈到了“Class / Object Chicken-and-Egg Paradox”。 我很难理解整个概念。 有人可以用更好/更容易/类比/其他术语解释它吗? 引用(强调我的): 类Class是它自己的一个实例; 也就是说,它是一个Class对象。 而且还有更多。 还记得class级Object吗? 好吧, Object是一个类……但是类是对象。 所以, Object是一个对象。 而Class是一个class级。 而Object是一个类, Class是一个对象。 哪个先来? 除非类Object已存在,否则如何创建类Class ? 但是,如果有一个类Class可以有实例,那么怎么会有一个类Object (或任何其他类)呢? 至少就目前而言,解决这一悖论的最佳方法是忽略它。 为了让类和对象系统运行起来,Ruby必须做一些鸡蛋或鸡蛋的东西 – 然后,循环和悖论并不重要。 在编程过程中,您只需要知道类是对象,类的实例称为Class 。 (如果你想简要地知道它是如何工作的,就像这样:每个对象都有一个内部记录,它是一个实例的类,而对象Class里面的内部记录指向Class 。)

Ruby:Ruby中实例和局部变量的区别

可能重复: Rails和类变量 请问有谁可以告诉我Ruby实例变量和局部变量之间的区别? 据我所知,实例变量和局部变量都是相同的,并且两者都在方法本身内声明,除了实例变量是用@符号表示的。

循环遍历整数中的位,ruby

我正在编写一个程序,其中一个问题是我需要对某些整数中的位模式进行一些分析。 因此,我希望能够做到这样的事情: #Does **NOT** work: num.each_bit do |i| #do something with i end 通过这样做,我能够创造出有效的东西: num.to_s(2).each_char do |c| #do something with c as a char end 然而,这没有我想要的性能 。 我发现你可以这样做: 0.upto(num/2) do |i| #do something with n[i] end 这比each_char方法的性能更差 这个循环将被执行数百万次或更多次,所以我希望它尽可能快。 作为参考,这是整个function @@aHashMap = Hash.new(-1) #The method finds the length of the longes continuous chain of ones, minus […]

Ruby on Rails最佳实践 – 大型控制器与小型控制器

我需要一些关于Ruby on Rails 最佳实践的信息,特别是对于必须做很多事情的Controller ,因此,一个简单的“show”动作现在就行了。 我知道,它不是很好,我有特定的代码。 这是一个示例代码: def show sound = Sound.find(params[:id]) @xml_path = File.dirname(sound.file.path) s3 = AWS::S3.new( :access_key_id => ‘XXX’, :secret_access_key => ‘XXX’) @url = s3.buckets[‘dev’].objects[sound.file.path[1..-1]].url_for(:read, :expires => 10*60) if sound.id_job != 0 && sound.transcript_progress != 100 @response = Savon.client(“http://srap.php?wsdl”).request(:avance) do soap.body = { :Jeton => “abcdef”, :ID_job => sound.id_job, } end @response = […]

Ruby:创建一个沙盒评估版?

我的Rails应用程序有关于何时应在页面上显示一些内容的复杂规则。 我决定通过在Ruby中编写谓词(简单的“是/否”函数)并将它们存储在数据库中以便随后进行评估来实现这一点。 这很简单。 我主要担心的是安全问题:如果恶意某人弄清楚如何写入数据库,他们可能会在数据库中粘贴任意Ruby代码,然后“ 所有基础都属于我们 ”。 那么是否可以创建一个“沙盒”eval,例如,删除了所有IO操作?