我正在尝试理解Webots(机器人模拟程序(中的示例代码。
我遇到了这段代码:
Servo rightShoulderPitch = getServo("RShoulderPitch");
rightShoulderPitch.setPosition(1.5);
我不明白第一行的肉是什么。看起来"rightShoulderPitch"是伺服类的对象,但它不是像往常一样创建的,以及"getServo"(我认为它是一种方法(是如何来到这里的。
如果它有帮助,则此类的标头为:
public class FieldPlayer extends Robot {
它还在参考手册中有公司的描述,但我无法理解它们的含义。可以在这里找到搜索getservo。
--- RShoulderPitch:是机器人肩膀的名称
我会帮上大忙的。
谢谢
这一行:
Servo rightShoulderPitch = getServo("RShoulderPitch");
。调用 getServo
方法,传入字符串值"RShoulderPitch"。返回值用作 rightShoulderPitch
变量的初始值,该变量的类型为 Servo
。(请注意,rightShoulderPitch
不是一个对象 - 它是一个变量。它有一个值,该值可以是 null 或对对象的引用。
我们无法判断getServo
的返回类型是什么,但它必须是隐式转换为Servo
的东西 - 所以要么Servo
本身,要么是某个子类。
getServo
可以:
- 创建一个新对象,并返回对它的引用
- 返回对现有对象的引用(例如,从缓存中返回(
- 返回空 值
- 引发异常
如果这些都无济于事,请准确澄清您不明白的内容。听起来您可能是 Java 的新手 - 在这种情况下,在没有 Webots API 的情况下学习"只是 Java"可能是一个好方法;只有当你对语言本身有信心时,才能学习Webots。
为了补充乔恩的出色回答,我将尝试用更笼统的术语来解释你。
当您想要三明治时,您有两种解决方案:
- 自己准备三明治。这将等效于代码
Sandwich s = new Sandwich()
- 去小吃店,问他们一个三明治。这将等效于代码
Sandwich s = snackBar.getSandwich("Ham & Cheese")
。
在后一种情况下,它是snackBar对象的getSandwich()
方法,该方法将使用您想要的三明治的名称("火腿和奶酪"(来准备三明治并将其返回给您。因此,此方法可能会在内部调用新的Sandwich()
。但它也可以委托给另一个对象并调用,例如:cook.prepareSandwich("Ham & Cheese")
。在这种情况下,烹饪对象将调用new Sandwich()
。或者 snackBar 对象也可以只获取预先准备好并存储在某个缓存中的三明治:fridge.getSandwich("Ham & Cheese")
。