Ruby的irb与[what?]等同于带有IDLE的Python Shell? (在Windows上,如果相关。)

时间:2013-04-16 17:03:46

标签: ruby ide irb

这是一个非常难以找到答案的问题。

(一些问题似乎在问一些至少相似的东西,比如:

Ruby console alternative for IRB (Windows)

IDLE like interactive console for Ruby

A recommended Ruby interactive console

但我无法从其中任何一个得到我想要的东西。)

另外,我对我应该使用的确切术语有点不确定,所以我会尝试在这里真正具体:

假设您正在将IDLE与Python shell一起使用。

你有一个IDLE的文本编辑器窗口,其中包含一个脚本“example.py”。

你点击了F5并且Python shell出现并完全按照你将“example.py”中的每一行逐行输入shell的方式做了。

从功能上来说,它正在做的就是自动进入每一行,只是通过显示它们而不会使屏幕混乱。 (此外,每次执行此操作时,它都会将shell重置为一个新状态,但这并不是当前重要的一点;有时可以选择让它重置shell的状态,无论如何。)

所以结果是现在你可以在shell中玩,并且你刚刚运行的脚本中的所有函数和变量等都在那里。

但是有了... ...

我如何获得相同的效果?

例如,我在Windows控制台中尝试了irb example.rb(一个等效的ruby脚本),它只是逐字地将每行输入到irb中,将它们喷到屏幕上,然后自动退出到Windows命令提示符。

(虽然即使那个 以我想要的方式工作(是否有一些选项旗帜争论的东西会让它在我这里做的更多吗?),我仍然需要alt-从文本编辑器到控制台窗口的选项卡,输入命令和文件名,这不如按F5,obvs。)

为了让真的确定我明白我的意思,这里有具体的例子:

1)“example.py”的Python脚本 2)在shell中运行它然后在shell中做一些事情的例子(从实际的shell复制粘贴)

3)与Python相同的Ruby脚本 4)在repl.it的kludgy,慢速在线解释器中运行它的一个例子,并在irb shell中执行完全相同的操作(再次,复制粘贴)

1)example.py:

x = "some value you don't want to keep reassigning to this variable"
y = "some other value like that"

def some_function(var):
    return "do something complicated with `"+var+"`"


print("example.py just ran")

2)Python shell:

Python 3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
example.py just ran
>>> x
"some value you don't want to keep reassigning to this variable"
>>> y
'some other value like that'
>>> print(some_function(x))
do something complicated with `some value you don't want to keep reassigning to this variable`
>>> x = "a frog"
>>> print(some_function(x))
do something complicated with `a frog`
>>> print("gonna run example.py again")
gonna run example.py again
>>> ================================ RESTART ================================
>>> 
example.py just ran
>>> print("x is back to: `\""+x+"\"`")
x is back to: `"some value you don't want to keep reassigning to this variable"`

3)example.rb:

x = "some value you don't want to keep reassigning to this variable"
y = "some other value like that"

def some_function var
        "do something complicated with `#{var}`"
end

puts "test.rb just ran"

4)repl.it上的在线Ruby irb shell事件:

Ruby 1.8.7 (2008-05-31 patchlevel 0) [x86-linux]
[GCC 4.2.1 (LLVM, Emscripten 1.5, Emscripted-Ruby)]

test.rb just ran
=> nil
   x
=> "some value you don't want to keep reassigning to this variable"
   y
=> "some other value like that"
   puts some_function x
do something complicated with `some value you don't want to keep reassigning to this variable`
=> nil
   x = "a frog"
=> "a frog"
   puts some_function x
do something complicated with `a frog`
=> nil
   puts "gonna run this script again..."
gonna run this script again...
=> nil

test.rb just ran
=> nil
   puts "x is back to: `\"#{x}\"`"
x is back to: `"some value you don't want to keep reassigning to this variable"`
=> nil

2 个答案:

答案 0 :(得分:1)

我到目前为止找到的最佳答案似乎是安装 pry (在命令提示符下输入gem install pry)。

现在,如果您通过输入pry scriptname.rb来运行脚本,并且遇到异常,它将自动进行交互。

此外,如果您在顶部的脚本中添加require 'pry',那么您可以在脚本中放置binding.pry

现在,当您运行脚本时(只需在命令提示符处输入scriptname.rb),它将停止执行并在此时进行交互式处理。

按^ D(即ctrl-d)将继续执行。

当您在编辑器中按F5(或其他)时,在命令提示符窗口中运行脚本(例如,Notepad ++)显然有些棘手。 Solutions like this有一些问题,我还没弄清楚如何进行调整。

所以目前我只是对命令提示符窗口进行alt-tabbing并从那里运行脚本(再次输入pry scriptname.rb或只是scriptname.rb,具体取决于我想要什么以及是否我在脚本中放了一个binding.pry。向上箭头调用,标签完成,等等等等。)

我是working on figuring it out

答案 1 :(得分:0)

我不确定100%是否是您想要的,但是根据我的经验,使用x将运行代码