如何从主文件共享对象到支持红宝石文件?
问题描述:
我有类似的东西。如何从主文件共享对象到支持红宝石文件?
# 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
答
请记住,变量是严格的本地化,除非你明确地通过它们。这意味着s
只存在于main
上下文中。
reply(s, line)
与接收方:你可以通过它在解决这个
def reply(s, input)
# ...
end
我倒是强烈鼓励你去尝试和缩进事情持之以恒这里,这个代码是真的出的种类,并避免使用像$connected
这样的全局变量。使用一个简单的自包含类,你可以清理这些代码。
另外,拨打require
时不要添加.rb
扩展名。这是暗示的。
我为缩进道歉。我只是从记忆中打字,所以没有确切的代码在我面前。感谢您的帮助。我不知道如何以这种方式传递对象,但现在我这样做了,它会使其他事情变得如此简单,因为我在Ruby中学习了新的有趣的事情。也不知道.rb是暗示的,所以这也是有用的信息。谢谢。 – user1305988
没有问题。只要提及这些事情,以便您可以避免未来的陷阱。 Ruby通常相当宽容,但有些事情是无法处理的,而且你的代码变得不可维护也很容易让你自满。希望得到它的工作。 – tadman
把它工作得非常好。现在到了下一座山。经过24小时涉足红宝石,我意识到我应该多年前尝试过。 – user1305988