方法参数如何在Ruby中工作?

时间:2016-02-09 17:02:40

标签: ruby

我似乎找不到这个问题的答案,我检查过的两本书似乎是为有经验的程序员编写的,他们不是Ruby的新手,也不是编程以及 Ruby。我很难理解方法论证如何运作以及它们的目的是什么。例如,我可以理解:

def method_name
  # method behaviour
end

然后,每当我想重新使用那一批特定代码时,我只需重新输入method_name,Ruby就会重复该方法中指定的操作。但是,我见过的大多数方法都在名称后面的括号中包含参数,即

def method_name (argument1, argument2)
  # method behaviour
end

我正在努力去理解论点的含义以及它们如何影响代码的功能。另外,为什么某些方法需要参数而其他方法不需要参数?参数是否代表用户的输入?它们与params相似吗?

3 个答案:

答案 0 :(得分:2)

就像你说的那样,想想像参数这样的论点(这两个词用于略有不同的含义,但这对你理解这一点并不重要。)

参数是输入以在方法行为中使用。

+--------+----------+-------------------------+------+-----------------------------------------------------------
| Domain | Method   | URI                     | Name | Action
+--------+----------+-------------------------+------+-----------------------------------------------------------
|        | GET|HEAD | /                       |      | App\Http\Controllers\PageController@index
|        | GET|HEAD | admin                   |      | App\Http\Controllers\AdminPageController@index
|        | GET|HEAD | admin/profile           |      | App\Http\Controllers\AdminPageController@profile
|        | GET|HEAD | login                   |      | App\Http\Controllers\Auth\AuthController@showLoginForm
|        | POST     | login                   |      | App\Http\Controllers\Auth\AuthController@login
|        | GET|HEAD | logout                  |      | App\Http\Controllers\Auth\AuthController@logout
|        | POST     | password/email          |      | App\Http\Controllers\Auth\PasswordController@sendResetLink
|        | POST     | password/reset          |      | App\Http\Controllers\Auth\PasswordController@reset
|        | GET|HEAD | password/reset/{token?} |      | App\Http\Controllers\Auth\PasswordController@showResetForm
|        | GET|HEAD | register                |      | App\Http\Controllers\Auth\AuthController@showRegistrationF
|        | POST     | register                |      | App\Http\Controllers\Auth\AuthController@register
+--------+----------+-------------------------+------+-----------------------------------------------------------

然后你可以用一些参数调用该方法:

def add(arg1, arg2)
    sum = arg1 + arg2
    return sum
end

答案 1 :(得分:0)

函数参数不仅适用于Ruby。

例如,考虑一个数学函数@Configuration @EnableMapRepositories public class PersistenceConfig { @Bean public KeyValueAdapter keyValueAdapter() { KeyValueAdapter adapter = new MapKeyValueAdapter(ConcurrentHashMap.class); Account testAccount = new Account(); testAccount.id = "dj-asc-test"; testAccount.givenName = "Gertrude"; adapter.put(testAccount.id, testAccount, "accounts"); Account read = (Account) adapter.get("dj-asc-test", "accounts"); Assert.notNull(read); return adapter; } } ,其中f(x) = x^2是输入,函数只是使用该输入来返回输出,在这种情况下x平方。

这个概念适用于跨多种语言的编程,其中参数可用于指定函数和函数调用者之间的契约,以修改函数的行为。

在ruby中,上述数学函数可以定义为:

x

答案 2 :(得分:0)

方法可以选择参数,设计师是否包含此选项取决于您。有时候包含这个选项是有意义的,有时候不是。当您编写更多代码时,您会看到这一点。

没有参数的示例

def say_hello
  puts "hello"
end

#calling the method
say_hello #=> hello

这个方法只是设计成在调用时打招呼,效果很好。

带参数的示例

def say_personal_hello(name)
  puts "hello #{name}"
end

#calling the method with an argument
say_personal_hello("mszub") #=> hello mszub

但是这个方法需要参数,因为我希望通过在其中添加特定名称来对其进行个性化。如果您愿意,名称可以是用户输入:

puts "What's your name?"
input_name = gets.chomp

def say_personal_hello(input_name)
  puts "hello #{input_name}"
end

say_personal_hello(input_name)

希望这会有所帮助。祝你好运。