如何调用 Ruby 中的函数?
How do I call a function in Ruby?
我正在尝试打电话,但我一直收到错误消息。这是我的代码:
require 'rubygems'
require 'net/http'
require 'uri'
require 'json'
class AlchemyAPI
#Setup the endpoints
@@ENDPOINTS = {}
@@ENDPOINTS['taxonomy'] = {}
@@ENDPOINTS['taxonomy']['url'] = '/url/URLGetRankedTaxonomy'
@@ENDPOINTS['taxonomy']['text'] = '/text/TextGetRankedTaxonomy'
@@ENDPOINTS['taxonomy']['html'] = '/html/HTMLGetRankedTaxonomy'
@@BASE_URL = 'http://access.alchemyapi.com/calls'
def initialize()
begin
key = File.read('C:\Users\KVadher\Desktop\api_key.txt')
key.strip!
if key.empty?
#The key file should't be blank
puts 'The api_key.txt file appears to be blank, please copy/paste your API key in the file: api_key.txt'
puts 'If you do not have an API Key from AlchemyAPI please register for one at: http://www.alchemyapi.com/api/register.html'
Process.exit(1)
end
if key.length != 40
#Keys should be exactly 40 characters long
puts 'It appears that the key in api_key.txt is invalid. Please make sure the file only includes the API key, and it is the correct one.'
Process.exit(1)
end
@apiKey = key
rescue => err
#The file doesn't exist, so show the message and create the file.
puts 'API Key not found! Please copy/paste your API key into the file: api_key.txt'
puts 'If you do not have an API Key from AlchemyAPI please register for one at: http://www.alchemyapi.com/api/register.html'
#create a blank file to hold the key
File.open("api_key.txt", "w") {}
Process.exit(1)
end
end
# Categorizes the text for a URL, text or HTML.
# For an overview, please refer to: http://www.alchemyapi.com/products/features/text-categorization/
# For the docs, please refer to: http://www.alchemyapi.com/api/taxonomy/
#
# INPUT:
# flavor -> which version of the call, i.e. url, text or html.
# data -> the data to analyze, either the the url, text or html code.
# options -> various parameters that can be used to adjust how the API works, see below for more info on the available options.
#
# Available Options:
# showSourceText -> 0: disabled (default), 1: enabled.
#
# OUTPUT:
# The response, already converted from JSON to a Ruby object.
#
def taxonomy(flavor, data, options = {})
unless @@ENDPOINTS['taxonomy'].key?(flavor)
return { 'status'=>'ERROR', 'statusInfo'=>'Taxonomy info for ' + flavor + ' not available' }
end
#Add the URL encoded data to the options and analyze
options[flavor] = data
return analyze(@@ENDPOINTS['taxonomy'][flavor], options)
print
end
**taxonomy(text,"trees",1)**
end
在 ** ** 我已经输入了我的电话。我做错了什么吗?我收到的错误是:
C:/Users/KVadher/Desktop/testrub:139:in `<class:AlchemyAPI>': undefined local variable or method `text' for AlchemyAPI:Class (NameError)
from C:/Users/KVadher/Desktop/testrub:6:in `<main>'
我感觉好像我在正常打电话,api 代码本身有问题?虽然我可能是错的。
是的,正如 jon snow 所说,函数(方法)调用必须在 class 之外。这些方法与 class.
一起定义
此外,Options
应该是一个 Hash
,而不是一个数字,正如您所说的 options[flavor] = data
,这会给您带来另一个问题。
我相信你可能想把 text
放在引号中,因为那是你的口味之一。
此外,因为你声明了一个class,这被称为实例方法,你必须创建一个class的实例才能使用它:
my_instance = AlchemyAPI.new
my_taxonomy = my_instance.taxonomy("text", "trees")
这足以使其正常工作,不过您似乎有办法让这一切正常工作。祝你好运!
我正在尝试打电话,但我一直收到错误消息。这是我的代码:
require 'rubygems'
require 'net/http'
require 'uri'
require 'json'
class AlchemyAPI
#Setup the endpoints
@@ENDPOINTS = {}
@@ENDPOINTS['taxonomy'] = {}
@@ENDPOINTS['taxonomy']['url'] = '/url/URLGetRankedTaxonomy'
@@ENDPOINTS['taxonomy']['text'] = '/text/TextGetRankedTaxonomy'
@@ENDPOINTS['taxonomy']['html'] = '/html/HTMLGetRankedTaxonomy'
@@BASE_URL = 'http://access.alchemyapi.com/calls'
def initialize()
begin
key = File.read('C:\Users\KVadher\Desktop\api_key.txt')
key.strip!
if key.empty?
#The key file should't be blank
puts 'The api_key.txt file appears to be blank, please copy/paste your API key in the file: api_key.txt'
puts 'If you do not have an API Key from AlchemyAPI please register for one at: http://www.alchemyapi.com/api/register.html'
Process.exit(1)
end
if key.length != 40
#Keys should be exactly 40 characters long
puts 'It appears that the key in api_key.txt is invalid. Please make sure the file only includes the API key, and it is the correct one.'
Process.exit(1)
end
@apiKey = key
rescue => err
#The file doesn't exist, so show the message and create the file.
puts 'API Key not found! Please copy/paste your API key into the file: api_key.txt'
puts 'If you do not have an API Key from AlchemyAPI please register for one at: http://www.alchemyapi.com/api/register.html'
#create a blank file to hold the key
File.open("api_key.txt", "w") {}
Process.exit(1)
end
end
# Categorizes the text for a URL, text or HTML.
# For an overview, please refer to: http://www.alchemyapi.com/products/features/text-categorization/
# For the docs, please refer to: http://www.alchemyapi.com/api/taxonomy/
#
# INPUT:
# flavor -> which version of the call, i.e. url, text or html.
# data -> the data to analyze, either the the url, text or html code.
# options -> various parameters that can be used to adjust how the API works, see below for more info on the available options.
#
# Available Options:
# showSourceText -> 0: disabled (default), 1: enabled.
#
# OUTPUT:
# The response, already converted from JSON to a Ruby object.
#
def taxonomy(flavor, data, options = {})
unless @@ENDPOINTS['taxonomy'].key?(flavor)
return { 'status'=>'ERROR', 'statusInfo'=>'Taxonomy info for ' + flavor + ' not available' }
end
#Add the URL encoded data to the options and analyze
options[flavor] = data
return analyze(@@ENDPOINTS['taxonomy'][flavor], options)
print
end
**taxonomy(text,"trees",1)**
end
在 ** ** 我已经输入了我的电话。我做错了什么吗?我收到的错误是:
C:/Users/KVadher/Desktop/testrub:139:in `<class:AlchemyAPI>': undefined local variable or method `text' for AlchemyAPI:Class (NameError)
from C:/Users/KVadher/Desktop/testrub:6:in `<main>'
我感觉好像我在正常打电话,api 代码本身有问题?虽然我可能是错的。
是的,正如 jon snow 所说,函数(方法)调用必须在 class 之外。这些方法与 class.
一起定义此外,Options
应该是一个 Hash
,而不是一个数字,正如您所说的 options[flavor] = data
,这会给您带来另一个问题。
我相信你可能想把 text
放在引号中,因为那是你的口味之一。
此外,因为你声明了一个class,这被称为实例方法,你必须创建一个class的实例才能使用它:
my_instance = AlchemyAPI.new
my_taxonomy = my_instance.taxonomy("text", "trees")
这足以使其正常工作,不过您似乎有办法让这一切正常工作。祝你好运!