ENV["BUNDLE_GEMFILE"] = File.expand_path("../../Gemfile", __FILE__)
我只是想从某个目录访问一个.rb文件,一个教程告诉我使用这个代码,但我不知道它是如何找到gem文件的.
是require File.expand_path(..., __FILE__)
项目中需要其他文件的最佳方法吗?
所以我正在写一些rspec测试,我对我缺乏Ruby理解感到尴尬.
我有一个如下所示的文件结构:
当我运行test_spec.rb文件的规范时,我要求包含upload_tool文件,如下所示:
spec -r ../upload_tool -fs test_spec.rb
Run Code Online (Sandbox Code Playgroud)
然后,upload_tool需要windows_gui.rb,如下所示:
require '../windows_gui'
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么我必须引用相对于test_spec.rb(需要../)而不是upload_tool.rb的windows_gui.rb?这对我来说是错误的,我想要在测试规范的上下文中使用upload_tool.rb,这意味着每次都要更改要求.
显然我遗漏了一些东西,但是如果我没有引用相对于测试规范,我得到一个文件未找到错误.
很抱歉在这里这么无知,但我空手而归.任何想法都赞赏.
BB
我在Windows 7上学习Ruby(使用版本1.8.6).
当我尝试运行下面的stock_stats.rb程序时,我收到以下错误:
C:\Users\Will\Desktop\ruby>ruby stock_stats.rb
stock_stats.rb:1: undefined method `require_relative' for main:Object (NoMethodE
rror)
Run Code Online (Sandbox Code Playgroud)
我有三个v.small代码文件:
stock_stats.rb
require_relative 'csv_reader'
reader = CsvReader.new
ARGV.each do |csv_file_name|
STDERR.puts "Processing #{csv_file_name}"
reader.read_in_csv_data(csv_file_name)
end
puts "Total value = #{reader.total_value_in_stock}"
Run Code Online (Sandbox Code Playgroud)
csv_reader.rb
require 'csv'
require_relative 'book_in_stock'
class CsvReader
def initialize
@books_in_stock = []
end
def read_in_csv_data(csv_file_name)
CSV.foreach(csv_file_name, headers: true) do |row|
@books_in_stock << BookInStock.new(row["ISBN"], row["Amount"])
end
end
# later we'll see how to use inject to sum a collection
def total_value_in_stock
sum = 0.0
@books_in_stock.each {|book| …
Run Code Online (Sandbox Code Playgroud) 我想创建一个带有函数库的静态ruby类.我在Vista上使用ruby 1.9.2
我的课就是这个:
class TestClass
def say_hello
puts "say hello"
end
end
Run Code Online (Sandbox Code Playgroud)
在一个TestClass.rb文件中(我假设我是正确的,因为所有关于类的ruby教程都是一个完整的混乱,把所有东西放在一个神奇的东西(文件?),好像IRB是所有事情的开始和结束).
我的ruby main()
(是的,我来自Java)或程序入口或者在ruby中调用它是:
require 'TestClass.rb'
puts "start"
say_hello
Run Code Online (Sandbox Code Playgroud)
但它失败了:
C:\ruby_path_with_all_my_classes>ruby classuser.rb
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load --
TestClass.rb (LoadError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from classuser.rb:1:in `<main>'
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?是否可以在Ruby中调用其他文件,或者只包含一个包含所有类的文件?