2017-08-08 33 views
1

我有类似的东西。如何从主文件共享对象到支持红宝石文件?

# MAIN.RB 
require 'sockets' 
require_relative 'replies.rb' 
hostname = 'localhost' 
port = 6500 
s = TCPSocket.open(hostname, port) 
$connected = 0 
while line = s.gets # Read lines from the socket 
#DO A BUNCH OF STUFF 
if line == "Hi" 
reply line 
end 
end 
s.close 

然后我在第二个文件中有回复函数。

# REPLIES.RB 

def reply(input) 
if input == "Hi" 
    s.write("Hello my friend.\n" 
end  
end 

但是从第二个文件中调用对象似乎不起作用。我将如何去做这项工作。我是Ruby的新手。我搜索了谷歌的答案,但我发现的唯一结果是在文件间共享变量。我总是可以做一个返回“你好我的朋友。\ n”,但我宁愿能够直接从函数写入到套接字对象上REPLIES.rb

回答

1

请记住,变量是严格的本地化,除非你明确地通过它们。这意味着s只存在于main上下文中。

reply(s, line) 

与接收方:你可以通过它在解决这个

def reply(s, input) 
    # ... 
end 

我倒是强烈鼓励你去尝试和缩进事情持之以恒这里,这个代码是真的出的种类,并避免使用像$connected这样的全局变量。使用一个简单的自包含类,你可以清理这些代码。

另外,拨打require时不要添加.rb扩展名。这是暗示的。

+1

我为缩进道歉。我只是从记忆中打字,所以没有确切的代码在我面前。感谢您的帮助。我不知道如何以这种方式传递对象,但现在我这样做了,它会使其他事情变得如此简单,因为我在Ruby中学习了新的有趣的事情。也不知道.rb是暗示的,所以这也是有用的信息。谢谢。 – user1305988

+0

没有问题。只要提及这些事情,以便您可以避免未来的陷阱。 Ruby通常相当宽容,但有些事情是无法处理的,而且你的代码变得不可维护也很容易让你自满。希望得到它的工作。 – tadman

+1

把它工作得非常好。现在到了下一座山。经过24小时涉足红宝石,我意识到我应该多年前尝试过。 – user1305988