我想要创建的是一个允许用户输入名称的程序,该名称将在两个不同的文件中提供两条消息。第二个文件中的消息只是输入的名称。特别是我自学的方法是涉及子类的公共类方法,我在下面的程序中的尝试就是这样做。任何建议或链接将不胜感激。调试器说它是语法错误行37(最后一行)“意外的$ end,期望key_word结束”。
puts "Hello Friend. What is your name?"
STDOUT.flush
$end
def self.get
name
end
def self.name
name = gets.chomp
end
File.open("testingruby.doc", 'w') do |file|
if name != "David"
file.puts "That's incorrect." + " " + name
else
file.puts "Hello " + name + "!" + " I hope you are well. Welcome to Ruby."
end
public_class_method :name
$end
class ExampleTwo < ExampleOne
def self.get
pizza
end
def self.pizza
piza = name
end
File.open("testingruby2.doc", 'w') do |file2|
file2.puts(pizza)
end
end
答案 0 :(得分:0)
您对File.open
的第一次调用错过了end
块:
File.open("testingruby.doc", 'w') do |file|
if name != "David"
file.puts "That's incorrect." + " " + name
else
file.puts "Hello " + name + "!" + " I hope you are well. Welcome to Ruby."
end
end
请记住,Ruby条件必须明确地关闭。从它的外观来看,您尝试关闭File.open
块而不先关闭条件,这会导致您的问题。
答案 1 :(得分:0)
正如我在对您的问题的评论中提到的那样,我浪费了相当多的时间来回复您之前的问题(这个问题的一个略微变体),在我尝试发布我的解决方案之前删除了这个问题,实际上是我脚下的地毯。我的回答的第一部分解释了代码的一些问题。那已经消失了,我没有兴趣重新创造它。我保留的第二部分是在下面。这是建议你做你想做的事情:
class ExampleOne
def self.name
puts "Hello Friend. What is your name?"
your_name = gets.chomp
if your_name != "David"
str = "That's incorrect," + " " + your_name + "."
else
str = "Hello " + your_name + "!" + \
" I hope you are well. Welcome to Ruby."
end
File.write("testingruby.doc", str)
File.write("testingruby2.doc", your_name)
end
end
我们可以通过运行它来测试它,然后读取它创建的文件的内容:
ExampleOne.name # Enter "Doug"
puts File.read("testingruby.doc") # => That's incorrect, Doug.
puts File.read("testingruby2.doc") # => Doug
ExampleOne.name # Enter "David"
puts File.read("testingruby.doc")
# => Hello David! I hope you are well. Welcome to Ruby.
puts File.read("testingruby2.doc") # => David
而不是File.write
我可以写:
File.open("testingruby.doc", 'w') do |file|
file.write(str)
file.close
end
此处file.close
是可选的;无论如何,该文件将在块的末尾关闭。同样,您可以写下:File.read
而不是 File.open("testingruby.doc", 'r') do |file|
puts file.read
file.close
end
。
file.close
并且,再次,{{1}}不是必需的。