我似乎找不到这个问题的答案,我检查过的两本书似乎是为有经验的程序员编写的,他们不是Ruby的新手,也不是编程以及 Ruby。我很难理解方法论证如何运作以及它们的目的是什么。例如,我可以理解:
def method_name
# method behaviour
end
然后,每当我想重新使用那一批特定代码时,我只需重新输入method_name,Ruby就会重复该方法中指定的操作。但是,我见过的大多数方法都在名称后面的括号中包含参数,即
def method_name (argument1, argument2)
# method behaviour
end
我正在努力去理解论点的含义以及它们如何影响代码的功能。另外,为什么某些方法需要参数而其他方法不需要参数?参数是否代表用户的输入?它们与params相似吗?
答案 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)
希望这会有所帮助。祝你好运。