- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
ANSWERED! I posted an answer with code that I modified from Arbitur. Thanks to Phillip as well for the key advice that lead me to redirect my searches.
总而言之:
is there a way to run a function from a string? Like RunFunction("myfunction_" + number + "()"), or, is a way to hardcode like myfunction_\&number() ?
我是 Justin,这是我的第一篇文章。在过去的 2 个月里,我一直努力工作以不提出问题,但我终于破产了。我会尽量简短,但我太罗嗦了(这个长介绍没有帮助)。提前感谢您的耐心等待。
基本上,我正在制作一个引擎,将简单的单词和短语转换为 Swift 代码;这样做的目标是快速制作文本游戏、教育应用程序以及任何涉及非线性问题/答案集的东西,这些问题/答案会根据您的响应方式而变化。
现在,我正在处理我认为比较简单的部分:存储标签和按钮的实际文本(我在 Xcode/iOS atm 中工作)。我决定像电影制作人/小说家那样对其进行建模:电影由场景组成,场景由剪辑组成。您也可以将其视为章节/段落
所以(不是实际代码):
App = (Scene 1 -> Scene 2 -> Scene 3, etc)
Scene 1 = (Clip 1 -> Clip 2 -> Clip 3, etc)
Scene 2 = Clip 2 -> Clip 5 -> Clip 1, based on responses
....等等。
在我思考(和编程)的方式中,除了严格的数据或严格的函数结构之外,我倾向于尽可能避免使用类。
因此,我的第一个解决方案是创建一个具有嵌套函数的结构(或类):
struct SceneList {
//fScene calls, and passes the clip# from the button click
func fPlayClip(clipNUM: Int)
{
//Do logic stuff, then play the correct clip
}
//Called from button clicks on main screen; passes in clip#
func fScene1(play_clip clipNumber: Int){
//sub functions(S1)
func fClip1(){ print("I'm scene 1, clip 1")}
func fClip2(){ print ("I'm scene 1, clip 2")}
fPlayClip(clipNumber)
}
func fScene2(play_clip clipNumber: Int){
//sub functions(S2)
func fClip1(){ print("Yo, scene 2, clip 1")}
func fClip2(){ print ("Yo, scene 2, clip 2")}
fPlayClip(clipNumber)
}
}
不幸的是,这个设计失败了,因为我无法从fPlayClip()中调用子函数,所以我采用了另一种方法:
//////////////////////////
/////SceneList.swift//////
//////////////////////////
struct Scene1{
func fClip1(){ print("I'm scene 1, clip 1")}
func fClip2(){ print ("I'm scene 1, clip 2")}}
struct Scene2{
func fClip1(){ print("Yo, scene 2, clip 1")}
func fClip2(){ print ("Yo, scene 2, clip 2")}}
//////////////////////////
////////Main.swift////////
//////////////////////////
// Implemention of the structs / clips.
// (playScene is called in button click method.)
func playScene(/*button prams go here*/){
// Switch(){ case desired: // Solve for X,
var oScenePlayer = SceneX() // where X is the desired scene
// Switch(){ case desired: // Solve for Z,
oScenePlayer.fClipZ() // where Z is the desired clip
}
再次失败,因为我不能只使用一个对象 [oScenePlayer],因为每个结构都是不同的类型。
然后我四处寻找了一段时间,试图找出一种方法来销毁该对象,然后重新创建它,但我做不到。然后,我四处寻找一种方法将一个对象重新分配给另一种类类型,但没有成功。然后,我仔细研究了扩展、协议(protocol)、泛型类型等,试图找出一种扩展/固有的方法来让它工作,但失败了。
所以现在,我的最后两个/working/解决方案是在场景变化时创建一个新对象,然后等待 ARC 或其他任何东西来销毁旧对象;或者,让我回到第一个例子,简单地将 [fPlayScene] 嵌入到每个函数中:
//SOLUTION 1:
struct SceneList {
func fScene1(play_clip clipNumber: Int){
//sub functions(S1)
func fClip1(){ print("I'm scene 1, clip 1")}
func fClip2(){ print ("I'm scene 1, clip 2")}
//Do logic stuff below, solving for Y
case desired:
fClipY()
}
}
//SOLUTION 2:
//////////////////////////
/////SceneList.swift//////
//////////////////////////
struct Scene1{
func fClip1(){ print("I'm scene 1, clip 1")}
func fClip2(){ print ("I'm scene 1, clip 2")}}
}
//And so on...
//////////////////////////
////////Main.swift////////
//////////////////////////
//////////////////////////
// Inside the globalish area:
let oScene1: Scene1,
oScene2: Scene2
//And so on...
var global_next_scene = 1
var global_next_clip = 1
/////////////////////////////////
// Inside the button call method:
func playScene(next_scene: Int, next_clip: Int){
switch(next_scene){ //Find the scene
case 1:
oScene1 = Scene1()
switch(next_clip){ //Play the clip
case 1:
oScene1.fClip1()
}
}
基本上,我觉得我使用了太多的 switch 语句,并且用在了太多的地方(可能有数百个场景和数千个剪辑),而像 RunFunction("fClip"+ next_clip + "()")
会起作用,但我不知道有任何“从字符串执行快速命令”函数:[,或者我可以硬编码的东西,比如 fClip\&next_clip\()
我认为在 15 年前我最后一次编写任何程序时在 c++ 中是可能的
我想出了一些其他疯狂的想法来实现这个,我什至考虑过 OOP(颤抖)嵌入式类并让成员变量保存子类的实例,但以我目前的知识/资源我找不到更简单的比最后 2 个片段更容易做到这一点。
所有的结构、成员函数、switch 语句等都将通过我的引擎自动生成——所以我并不是在寻找一种更快的方法来做到这一点,它只是看起来效率低下/征税的方式来做到这一点。
任何指导将不胜感激。提前致谢,我很惊讶我花了这么长时间才需要在这里提问 ^-^()
平安与祝福
最佳答案
在我看来,您正在将自然数据混合到您的代码中。也就是说,您创建的函数知道它们负责哪个元素……这就是导致您想知道的所有重复的原因。
也许问题的某些部分我不明白,但为什么没有这样的结构:
class Clip {
func play() {
print("Playing \(self)")
}
}
class Scene {
var clips = [Clip]()
func play() {
print("Playing \(self)")
for aClip in clips {
aClip.play()
}
}
func playClip(number: Int) {
if number >= 0 && number < clips.count {
clips[number].play()
}
}
}
class SceneList {
var scenes = [Scene]()
func play() {
print("Playing \(self)")
for aScene in scenes {
aScene.play()
}
}
func playScene(number: Int) {
if number >= 0 && number < scenes.count {
scenes[number].play()
}
}
}
var list = SceneList()
for _ in 0..<2 {
var scene = Scene()
list.scenes.append(scene)
for _ in 0..<3 {
scene.clips.append(Clip())
}
}
list.play()
添加您喜欢的任何其他属性和逻辑,但重点是将这些编号的函数转换为具有数据引用的通用函数。
关于ios - 如何处理任务 : Inquiry with Choices and Responses (Engine),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38397008/
我正在使用 Python2 和 Django 1.9。 基本上我有一个包含两个下拉菜单的表单。第二个下拉列表取决于第一个下拉列表的值。 例如,如果下拉列表 #1 选择了“类别”选项,则下拉列表 #2
我有 2 个 Django 模型——主要(产品)和链接的详细信息(PhysicalProperty 是通过附加模型 ProductMetricals 的多对多链接)。 在主模型 Product 中,我
我正在尝试创建一个带有两个下拉菜单的网站:部门和类(class)编号。下拉菜单的数据来 self 的 SQL 数据库的“类(class)”表。现在我的网站正确初始化并在下拉菜单中显示正确的选项。然而,
你好,我对 python 相当陌生,我的一段代码遇到了问题。在一个“if”语句之后,当我不希望它执行时,我的代码将继续执行下一个“if”语句。我尝试过 elif 但它提出了无效的语法。 print(
我已经在我的 Django 项目中安装了 MongoDB。因为是我第一次使用 Mongo,我决定尝试一下它是如何工作的,我创建了一个简单的程序来存储数据(在我的例子中是价格和数量)。 该项目称为“ex
我已经尝试过 ActionListener 和 ItemListener,但它不起作用,而且我也尝试过搜索可能适用于它的代码和方法,但我只是没有找到它,主要可能是因为 JCombobox 更受欢迎,我
抱歉,我是编程界的新手。我正在创建一个控制台应用程序,它基本上会根据您的输入来确定您是想将摄氏温度转换为华氏温度,还是相反。 我遇到的问题是: "Error 3 A local variable na
random.SystemRandom().choice() 和有什么区别& random.choice()在 python ? 我有 seen the former being used ,不止一处
我的 XSD 有问题。我的 XSD 包含一个 xs:choice 来实现选择其中一种类型的选项。不允许选择无类型(或 Null)! 我已经通过 xsd.exe 从 xsd
我有 2 个应用程序。 input:具有包含下拉列表的形式:region。下拉列表值来自结果数据库(由用户上传)。填写表单时,用户需要从下拉列表中选择值。 result:有数据库 现在我可以在输入表单
有人可以告诉我我可能做错了什么吗?我在运行 python 代码时不断收到此消息: import random foo = ['a', 'b', 'c', 'd', 'e'] random_item =
为什么 numpy.random.choice 与 random.choice 不同?当我这样做时: >>> random.choice([(1,2),(4,3)]) (1, 2) 有用。 但是当
我有一个由 2 个 ChoiceField 和一个 CharField 组成的表单。当选择第一个 ChoiceField 的项目时,通过 ajax 填充第二个 ChoiceField。 填充它的模板如
为什么我们不能在表单中使用Choice.IMPLICIT,而我们可以使用Choice.EXCLUSIVE。当我使用 Choice.IMPLICIT 时,它给了我一个 java.lang.Illegal
例子: element = ['Flaming', 'Cold'] fire_properties = ['of Fire', 'of Flame'] cold_properties = ['of I
我正在生成我们的 Java Web 服务 WSDL,然后每次进行更改时将其导入到我们的 C# 应用程序中。每次这样做时,xs:choice元素会重新生成,但通常具有不同的数量,具体取决于首先生成的元素
我是 Django 新手。我使用简单的 ajax 根据类(class)选择动态更新选择字段学期。但是在提交表单时,我收到错误选择有效的选择。 所选选项不是可用选项之一。代码如下: 表单.py: fro
1)是否有symfony方法? 我有一个基本形式(未映射到数据库),其中包含一些选择字段,例如: $builder->add('civility', 'choice', array('cho
我已经为这个问题苦苦挣扎了一段时间,所以非常感谢任何帮助。 情况如下:我的应用程序有一个名为 InitialViewController 的 UIViewController 子类。这个 View C
这个问题在这里已经有了答案: How can I dynamic populate an option widget in tkinter depending on a choice from a
我是一名优秀的程序员,十分优秀!